1. 注册中心
主流技术栈:Zookeeper、Eureka、Consul、Nacos
Zookeeper: 多用于Dubbo,leader+follower,leader写同步到follower,follower可以读。CP,leader崩溃的时候,为了保证数据一致性,要重新选举leader以及数据同步,集群可能会短暂不可用;
Eureka: 多用于Spring Cloud NetFlix,peer-to-peer,每个节点都能读都能写,异步复制。AP,不同的节点可能读到的数据不一样,任何节点宕机,其他节点正常工作;
Consul: 多用于Spring Cloud,基于raft算法的CP模型;
Nacos(推荐): 用于Spring Cloud Alibaba,支持CP和AP。功能最为完善,包括了雪崩保护、自动注销实例、坚挺支持、多数据中心、跨注册中心同步、Spring Cloud集成、Dubbo集成、k8s集成。
2. RPC框架
主流技术栈:Feign+Ribbon、Dubbo、gRPC
Feign+Ribbon: Spring Cloud NetFlix技术栈,轻量级框架,基于Spring MVC写的controller暴露出的http接口,本质是发送http请求给Tomcat,tomcat收到解析这个http请求,交给Spring MVC写的controller来处理;
Dubbo: 自定义协议,组装请求、序列化,重量级框架;
gRPC: 跨语言通信,要生成代码;
3. 微服务开发完整流程
1)系统设计(概要设计、详细设计/简化设计)
概要设计:业务架构、技术架构、业务流程、技术方案、部署方案;
详细设计:接口定义、数据库表结构、核心类建模(领域设计)、各个接口被请求时的系统运行时序图、技术方案细化;
简化设计:运行流程图、技术方案、接口、表、时序图。
2)开发代码
3)本地自测:单元测试、dev环境自测
4)持续集成
5)联调测试/功能测试:日常环境联调、测试;
6)预发布测试:模拟线上环境,可进行压力测试、全链路压测、性能测试、可用性测试、稳定性测试,线上流量回放;
7)线上部署。
4. 部署方案
1)滚动发布:一个服务部署在多台机器上,部署的时候每台机器依次停机tomcat,再重新启动tomcat; 滚动发布风险加大,自动发布完成后出现问题,要全量重新部署,时间较长;
2)灰度发布:上线不是一次性滚动全部发布到所有机器,只部署比如1台机器,切比如10%的流量,观察并运行一段时间,没有问题后进行全量发布;一旦出现问题,只会影响灰度的部分系统和数据;
3)蓝绿发布:灰度发布全量部署以后,仍然有可能出现问题,回滚很慢,此时可以将流量全部立马切回老集群;一般用于大版本的发布。