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方式的