一、微服务设计的康威法则
传统方式的问题:一个项目,多个团队围绕着一个模块进行开发时候,如果某个团队对该模块进行了升级或者优化,就会导致其他团队也要进行整体优化,这样成本很高;
康威法则:设计系统的组织,其产生的设计和架构,等价组织的组织架构。简单来说就是一个团队围绕一个模块来进行开发。
二、微服务引入的时机
企业项目在刚刚创建的时候,并不是适合马上就引入微服务项目,因为项目初期并不知道各个模块具体的划分如何,而且容易出现生产问题,建议先实现单模块或者多模块开发,然后在根据业务复杂度情况,慢慢讲业务剥离开来,形成一个单独的模块;
三、微服务的中台战略
又称为“大中台,小前台”
四、微服务网关
在过滤器的三个阶段中,各个阶段的数据通信是通过request context实现的。
五、Netfix架构布局
六、集中式配置
例如spring cloud config、携程的apollo,通过将整个项目的配置文件单独用一个服务的进行管理,其他的微服务只需要拉去就可以了。实现的高内聚、低耦合。
七、RPC与REST的比较
RPC | REST | |
耦合性 | 强耦合 | 松散耦合 |
消息协议 | 二进制thrift、protobuf | 文本XML,JSON |
通讯协议 | TCP | HTTP/HTTP2 |
性能 | 高 | 一般低于RPC |
接口契约IDL | thrift、protobuf | Swagger |
客户端 | 强类型客户端,一般自动生成多语言 | 一般HTTP客户端可访问,可自动生成强类型 |
案例 | Dubbo、motan、Trars、grpc、thrift | spring MVC/Boot、Jax-rs |
开发者友好 | 客户端比较方便,但二进制消息不可读 | 文本消息开发者可读,浏览器直接接收 |
对外开放 | 对外一般需要转换成REST/文本协议 | 直接可以对外开放 |
八、调用链监控
CAT | ZipKin | Pinpoint | |
调用链可视化 | 有 | 有 | 有 |
报表 | 非常丰富 | 少 | 中 |
ServerMap | 简单依赖图 | 简单 | 好 |
埋点方式 | 侵入 | 侵入 | 不侵入字节码增强 |
heartbeat | 有 | 无 | 有 |
Mertic | 有 | 无 | 无 |
Java/net客户端支持 | 有 | 有 | 只有java |
DashBoard中文支持 | 好 | 无 | 无 |
社区支持 | 好,文档较丰富,作者在携程点评 | 好,文档一般,无中文社区 | 一般,文档缺,无中文社区 |
国内案例 | 携程 | 京东,阿里不开源 | 暂无 |
源码祖先 | eBay CAL-Centralized application Logging | Google Dapper | Google Dapper |