像梦一样奔驰|毕业就在小公司躺了3年,再想找个老实的大厂待着,发现没人要…( 三 )
理所当然的你会根据不同业务拆分出不同的服务 , 并且会整理出当前公共的功能变成一个公共服务 , 每个服务独立部署 , 独立运行 , 代码进行了物理隔离 , 一个小团队维护一个服务或多个服务 。
并且一般而言服务化了 , 数据库也会拆分出来每个服务维护自己的数据库 , 数据库之间的数据通过接口传递 , 而不再是直接访问 。
此时你的系统变成了下图所示的样子 。
那现在解决了单体应用什么问题?
系统的耦合度降低 , 模块之间的边界清晰 , 都按业务物理隔离了 。
在一定的措施下(下文会提到) , 系统整体可靠性变高 。
技术选型丰富 , 不同的服务可以利用不同的技术或语言实现 , 例如数据分析服务可以用 Python 实现 , 一些底层的服务团队说我要用 GO , 那就用 GO 呗 。
可根据服务扩展部署 , 商品服务访问量特大 , 那我们就单单给商品服务扩容 , 增加机器 , 其他服务照旧 。
这就是微服务了 。
好像微服务架构解决了单体应用的所有痛点啊?别急上面只是微服务的一部分 , 真正的微服务架构还需要包含很多东西 , 微服务是解决的单体应用的痛点 , 但是也引入了新的痛点!
服务化了之后上线某个需求 , 如果是单个服务内的不影响其它服务的你会感到很舒服 , 如果这个改动是接口层面的改动 , 涉及到多个服务 , 你就会觉得有点难受了 。
上线之前需要定制好服务上线的顺序 , 定制好每个服务的回滚计划 , 涉及到每个团队之间的合作 , 上线不再是一个简单的打包、部署的过程 。
出了问题也不是一个简单回滚的过程 , 而可能是各个团队分别回滚各自的服务 。 如果你自己的服务出了问题你会很焦虑 , 别的团队都等着 。 如果别的团队出了问题你也焦虑 , 怎么还没好啊 。
你还会发现本地开发如果依赖别的服务会异常的难受 , 特别是你依赖的服务还依赖别人的服务 , 调试、测试将变的复杂 。
而且你会发现调用链路变长 , 调用增加了网络的开销 , 性能变差 。 而且出错难以定位问题来源 。 因此你需要引入分布式链路追踪服务来定位问题 。
还需要引入ELK来方便日志的查看 , 分析问题 。
为了能够动态扩容 , 你的服务需要自动注册且能被自动发现 , 因此需要个注册中心 。
网络之间的调用较为不可靠 , 因此还需要让调用有重试机制 , 防止其他服务出 bug 或其他原因疯狂调用你的服务 , 还需要有限流措施 。 为了防止一个服务挂了导致整体的雪崩需要有熔断措施 。
为了在特殊时候例如大促的时候让出硬件资源给核心功能 , 还需要有降级策略 。
上面说的重试、限流、熔断、降级就是上文提到的一定措施下 , 可靠性变高 。
而且每个服务都需要配置 , 因此还得有个配置中心 , 来做统一管理 。
服务太多了 , 调用关系复杂为了对调用者更加的友好 , 并且还需要对调用进行权限等控制 , 因此需要有个网关 , 对外暴露统一的接口 , 当然想限流什么的可以在网关实现 。
当然整体的监控是必不可少的 , 对所有的服务都需要做到全面的监控 。
【像梦一样奔驰|毕业就在小公司躺了3年,再想找个老实的大厂待着,发现没人要…】其他的还有啥DevOps、容器等等 。
可以看到服务化之后需要引入太多太多的东西 , 有人可能说你这也就才几个服务啊 , 我上面的服务其实可以再细分 。
推荐阅读
- 芒种风向标|奔驰全新S级的内饰好看吗?不得不说优秀全靠同行衬托
- 奔驰E级|奔驰E级:开始清仓,为什么降到35万还有库存
- 光明论|劳动者的尊严不能像证件一样被“扔”在地上
- 懂车善用|如今跌破22万,比奔驰C漂亮,22万开出50万面子,曾经卖60万
- 有车以后|2 万多!,最便宜的奔驰 SUV 新款上市,价格又便宜了
- 胖哥汽车频道|或取消2.0T发动机,奔驰国产全新C级谍照曝光
- 科技日日说|realme真我X7全方位评测:不一样的颜值,不一样的体验!,原创
- 王者荣耀|没有明世隐的“狼狗”不能玩?正确玩法教给你一样凯瑞全场!
- 像梦一样奔驰|51WDP开发者平台五大工具全面开放,让数字孪生触手可及
- 虎扑足球|巴黎也是一样,莱昂纳多:任何俱乐部要签人都得先卖人
