微服务及技术栈介绍
简介
架构发展历程
只能采用同一种技术,很难用不同的语言或者相同语言不同版本开发不同模块。
系统耦合性太强,其中一个模块有问题,这个系统就会瘫痪,一个模块升级,整个系统就得停机维护。
要上线,必须一起上线,互相等待,无法快速相应市场需求。
集群负担大,如果想要集群,只能对整个系统进行集群,即使一个模块有压力。
独立进程部署,独立进程运行,独立演化。服务之间可以做到高内聚,低耦合。
独立开发和维护,业务解耦,无论是业务系统还是分布式服务都独立演化。
分布式管理
隔离性增强
由一系列服务组装成系统,不用重复建设,模块、代码可以复用。
数据一致性(多服务完成一个任务)和系统的可用性(集群)成为问题
数据库也进行了拆分
维护、设计、架构成本增加,调试、纠错更难
网络传输分布式损耗成本
不适合高并发和大数据的环境
可用性:描述一个系统在一段时间内提供有用资源的能力,从而减少停工时间,而保持其服务的高度可用性。
伸缩性:根据需求动态添加和删除系统中资源的能力,是水平或垂直扩展的专门实现。
可以使用不同语言或者相同语言的不同版本开发各个模块。
系统耦合性低,各个模块分而治之,独立部署,独立发布,独立维护。
可以更快的相应市场的需求,更符合敏捷开发。
可以对不同模块使用集群策略,哪里有问题治哪里。
开发难度更大,系统结构更复杂。
运行效率低,网络调用成本很大。
微服务架构的发展历程
服务发现,手动修改配置文件,重新启动。
负载均衡,可以轮训、权重、哈希等等。
服务新增无法发现,需要手动配置,服务掉线可以自动检查。
客户端的实现很简单,不需要额外的代码,简单,高效。
服务注册与发现,动态增加,自动完成。
健康检查,可以查看损坏服务,去掉服务,自动完成。
负载均衡,Consul返回所有活动服务实例,客户端自己实现负载均衡。
微服务架构必备技术栈
主动触发
数据序列化传递
跨平台
跨语言
Http穿透防火墙
Net Remoting:Net平台督邮的,不支持跨平台。
gRPC:高性能、开源和通用RPC框架,面向服务端和移动端,基于HTTP/2设计,推荐使用。
Consul可以实现分布式锁
Redis可以实现分布式锁,推荐使用。
ZooKeeper可以实现分布式锁
数据库可以实现分布式锁
2PC(two-phase commit protocol,强一致性,没有可用性)
3PC
TCC(Try-Confirm-Cancel)
本地消息表,推荐RabbitMQ
Saga模式
上游投递消息
下游获取消息
上游投递稳定性
下游接受稳定性
结束语
文章转载: 分布式实验室
(版权归原作者所有,侵删)