传统的软件应用为单体架构。尽管也是模块化逻辑,但是最终还是会打包并并部署为单体应用。最主要的原因是太复杂。并且应用扩展性低,可靠性也低。敏捷开发和部署变得无法完成。
治理办法:化繁为简,分而治之。
大家经常谈论的是一个叫SOA(面向服务的架构模式),它和微服务又是什么关系?你可以把微服务想成是SOA的一种实践。
围绕业务功能构建的,服务关注单一业务,服务间采用轻量级的通信机制,可以全自动独立部署,可以使用不同的编程语言和数据存储技术。
微服务组件化,通过组件组合快速开发系统,业务单一的服务组件又可以独立部署,使得整个系统变得清晰灵活:
缺点:基础设施的建设、复杂度高
经常性可以听到某宝,某b站崩溃等新闻。
传统实现组件的方式是通过库(library),库是和应用一起运行在进程中,库的局部变化意味着整个应用的重新部署。
通过服务来实现组件,意味着将应用拆散为一系列的服务运行在不同的进程中,那么单一服务的局部变化只需重新部署对应的服务进程。
Go实现一个微服务的模式:
- kit:一个微服务的基础库(框架)
- service:业务代码+ kit依赖+第三方依赖组成的业务微服务
- RPC + message queue:轻量级通讯
本质上等同于,多个微服务组合(compose)完成了一个完整的用户场景(usecase)。
微服务架构采用粗粒度的进程间通信,引入了额外的复杂性和需要处理的新问题,如网络延迟、消息格式、负载均衡和容错,忽略其中任何一点都属于对“分布式计算的误解”。
具体要详细了解以下方面:隔离、超时控制、负载保护、限流、降级、重试、负载均衡。
切记一旦采用微服务架构,那么在服务需要变更的时候我们一定要注意,服务提供者的变更可能会引发消费者的兼容性破坏,时刻保证接口的兼容性。
发送时要保守,接收时要开放。
更多【编程技术-微服务概览】相关视频教程:www.yxfzedu.com