spring讲解记录:微服务设计的经验和语义云经验

一、微服务

优点:访问流量大情况,高并发支持,快速迭代,模块之间解耦独立

 

1、RPC架构

 

1)服务发现和注册:专门负责发现服务,可以发现宕掉的并自动去掉          和ZK一样,double也是用ZK注册的,springclode,

 

2)负载均衡、高可用:自动扩容和缩容,或者告警 F5硬件实现(买两台100万)

软件ngix(能做7层(应用层)http的协议)、lvs(能做4层协议(ip层的协议))、设置dns(主机宕了不能发现)  基于服务端做负载,不能做私有的协议(否则连你的时候还要写)

分为内网和外网:服务之间的是内网、外部的http协议过来的用ngix做

 

3)序列化、反序列化:语言无关的(谷歌的cromebuffer)必须定义映射关系、java(inputstream)性能最低、json(语义云用json+http)

 

4)派置服务:解决多服务的配置修改重启:baidu(discup)、springclode

 

5)sequence服务:统一生成序列化,uuid,redis去做id生成icres指令(单线程),ulog

redis+ulog

 

6)downker有镜像服务存储服务的景象,用命令将服务拉下啦启动

 

7)统一日志管理机制,调用链监控系统

常用elk,传统flom监控,用spak汇总,用es存储,通过mq放到单独主机的sdfs,消息中间件省了es的东西

 

8)统一接入API(认证、授权)统一接入web,(http和udp也能做)做拦截

 

2、开发区别

 

1)数据一致性:CIP,一致性和分区可用性和高可用

两种:最终一致行和允许丢失两种和强一致性(a同步b、c,等b、c返回再返回)zk就是这样,所以建议5台以下

①通过mq+本地事务(本地事务表存储调用的事件)失败了重试a、b、c三个任务,百度:微服务一致性的解决方案

③所用操作幂等性(每次调用参数和结果是一致的)

 

2)多线程和同步的问题

分布式锁:基于zk的、基于redis的

 

3)共享内存的问题

redismemorycatch共享内存(不要存大对象,否则严重阻碍响应)

 

4)本地缓存(不增加资源)只用本地主机可见(5分钟后让其他知道)不用map存,用时间或大小限制,为了本地缓存是不用mq方式的