参考资料:
- 什么是微服务架构? https://www.roncoo.com/article/detail/130121
- 什么是微服务架构? https://www.zhihu.com/question/65502802
- 什么是微服务? https://www.jianshu.com/p/39c1e4ec0d63
- 微服务中 Dubbo 和 Spring Cloud 架构技术路线对 https://juejin.im/entry/5ae01ee3518825672d33d6ed
微服务特点体现在『微』字上,服务微小,小巧灵活,功能单一,细颗粒度。微服务是一种架构上的风格,把业务需求不断细分成若干个功能模块,尽量使功能模块提供单一功能。
由于微服务的颗粒度小,功能相对较单一,让每个服务专注于一件事情,因此它完全可以独立开发、单独测试、独立发布,与其他服务隔离,但是可以相互调用。如此细颗粒度的功能,可以比较快速的生产实现一个微服务上线工作,
微服务架构思想
摘自网络:知乎回答
一个应用是由多个小的、相互独立的。微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖。不同服务通过一些轻量级交互机制来通信,例如RPC、HTTP等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立团队来维护。简单的来说,一个系统的不同模块转变成不同的服务!而且服务可以使用不同的技术加以实现!
个人小结
每个服务提供尽量单一的服务功能,每个微服务可以单独开发,服务之间可以互相调用。多个微服务的开发语言可以不一致,但是必须提供一个统一标准的通信接口(统一多个微服务之间的信息通信机制)。微服务可以独立发布运行。由于单一、独立,可以非常方便的单独开发,而不用多人协作开发,同时完成单元测试、集成测试、单独部署。
2018年11月15日 个人想法
服务功能单一,应该单个功能做成一个服务。当前个人思想是,比如用户相关,把用户相关的功能做成一个微服务对外提供服务,包括:注册登录、获取用户信息、修改信息等跟用户信息相关的做成一个服务。而这个用户微服务,就围绕着用户信息来做周边功能接口对外提服务。
- 数据去中心化
- 微服务拥有自己的独立数据库,而非与其它服务共用数据库
- 可以采用不同的数据库技术
- 可以采用不同的数据库操作技术(连接池、数据库框架)
- 建议与团队技术栈保持一致
主流的软件
核心部件
发现、注册、路由、熔断、降级、分布式配置
主流微服务框架
- Spring Cloud
- Dubbo
服务治理注册中心
- Eureka
- Zookeeper
- Consul
- Dubbo Registry
路由网关
- Zuul
- Nginx
- Spring Cloud Gateway
- Linkerd
- Envoy
- UnderTow
微服务:熔断
- Hystrix
微服务优点
功能单一,独立开发,单独测试,简化部署
微服务缺点
- 复杂度高:微服务之间的调用复杂
- 运维成本高:由于微服务之间需要互相调用,每个微服务独立运行,还需要对微服务做运行状态监控,运维人员需要对系统有清楚的了解才能更好的运维系统
- 微服务之间过多的调用可能会影响性能
微服务的哪些坑
- 不能为了微服务而微服务
- 选择适当的项目应用微服务,并不是所有的项目都能够适应微服务
- 微服务的功能不能为了单一而使劲的拆分使其单一
- 问题定位困难
避免强行微服务
- 应当充分分析项目需求来决定项目采用技术架构,而不是直接使用微服务
- 需求功能拆分时,切勿为了拆分功能而拆分功能,应分析功能是否有拆分的必要性