1. SOA与MSA
1. 是什么
SOA是面向服务架构
MSA是微服务
2. 关系
MSA 是细粒度的SOA
3. 通信协议
通信协议经过这些年的发展,现在主流的基本上了两种:
1. 文本协议
使用最广泛的多是基于HTTP的RESTful规范
1. 轻量级二进制协议
Thrift、Protobuf,或者任何自定义的轻量级协议
4. 微服务的优点
实现简单、可维护性。
根据需求进行划分服务的大小。
服务可以单独进行开发、部署、测试。
数据分离。
5. 服务中的高并发解决
对于一个做内容的网站,高并发带来的直接挑战是大量数据(图片、文本)的获取,而对于写的需求相对而言并不会很高,所以CDN、缓存、网页静态化等都是可以采用的软硬件解决方案;
而对于电商类的交易系统,更重要的是保证系统的快速响应、持续可用、最终一致、和水平扩展,所以NIO、分库分表、缓存、API升降级、负载均衡都是可以采用的方案。
6. 常用技术
1) 基础设施
任何软件系统都是要部署到具体的基础设施上去的,关于基础设施的部署也有很多的选择,如:PC vs Docker、Apache vs Nginx、Tomcat vs Jetty。
2) 微服务框架
- Spring全家桶
用起来很舒服,只有你想不到,没有它做不到。 - Dubbox
很多国内的企业还在用,可以支持RESTful风格的API,但更多的还是会使用Dubbox的默认的基于RPC的API,调用远程API像调用本地API一样。这样做无疑带来了很多优势,但同时其基于接口的方式增加了服务间的耦合,怎么说呢,各有利弊。 - Thrift
如果你比较高冷,完全可以基于Thrift自己搞一套抽象的自定义框架。
3) 同步vs异步
在跨服务的业务逻辑的实现上,使用基于消息的异步调用,还是使用保证结果的同步方案。
4) 数据服务
内存数据库 vs 持久化数据库(Redis vs MySQL)
关系型数据库 vs 非关系型数据库(MySQL vs Mongo)
传统数据库 vs 分布式数据库(MySQL vs F1)
非关系型数据库又有如KV数据库,文档数据库,图数据库等。
由于MSA提倡服务间的数据隔离,往往不同的服务使用不同的数据源,这就会直接导致数据聚合查询比较困难的问题。进行数据聚合又有几种不同的方案(如CQRS)。
5) 日志分析
日志分析也是有很多的成熟解决方案(如ELK)。