【轻阅读】为什么越来越多的系统在做服务化?

偷懒的程序员 2019-11-26 11:34:21 ⋅ 886 阅读
转载自:https://www.toutiao.com/a6762845113832964622

首先要表明一个观点:脱离业务实际情况的架构都是耍流氓,所以不是所有系统都必须服务化,也不要为了服务化而服务化。

在了解服务化的好处之前,让我们先看看传统的系统架构是什么样的,当了解传统架构的缺点之后,再去看看为什么要做服务化,就容易理解了。


单体架构

在单体服务的时代,我们是一台应用服务器,后面挂一台数据库。

当访问量增多的时候,会引入负载均衡、数据库读写分离、分库分表等技术,系统的一个整体的架构大概是这个样子的:


这种架构,会有什么样的痛点呢?

系统在不断发展的过程中,可能会遇到下面几种情况:

  • 数据到处都有:如果系统彼此独立,那么相同或类似的数据会分散存储,举个最简单的例子,如果一个公司对外的系统很多,每个系统都提供用户注册的功能,注册后用户信息保存到自己的系统,当公司内这样的系统越来越多,问题就会凸显;

  • 系统体积庞大:如果功能都集中在一个系统中,那么这个系统将拥有太多的功能,就会造成项目代码过多,维护、迭代、发布也会变得困难;

  • 代码到处拷贝:如果数据库统一,用户信息都存储到一个数据库中,开放给各个业务系统操作(事实上几乎没有公司会这样做),这样带来的一个问题就是,相同逻辑的代码,会分布在多个系统中;更严重的是,代码与数据库的耦合度太高,不易于扩展。

  • 代码质量无法保障,系统/模块之间相互影响:假如A功能写了SQL导致全表扫描,数据库的CPU飙到100%或造成锁表,那么影响会影响到其他功能。

服务化架构

这时候会考虑在代码这个级别,对用户数据的操作,进行服务化;服务化后的架构大概是这个样子(这里先不讨论是直接调用,还是服务注册、发现):


这个服务化的过程其实也非常简单,在例子中,说白了就是把用户相关的功能单独做一个系统,并且把对用户信息的操作通过接口的方式暴露出来,那么服务化有什么好处,到底解决了哪些问题呢?我总结有这么几点:

  • 相同的数据集中存储:例如用户数据只保存在用户中心;

  • 业务逻辑集中,可复用:一个功能,只需要一处实现,其他系统只需要调用接口;如果是RPC的方式实现,就像调用本地的一个方法一样;具体业务逻辑是如何实现的,调用方不需要关心;

  • 屏蔽了底层复杂度:用不用缓存,数据库是否需要分库分表,对调用方来说,都是黑盒;

  • 增加数据价值:当数据被集中在了一起,才能做下一步的处理、分析、预测;才能发挥出数据的价值;

服务化的缺点

  • 高可能的要求更高,事故发生后的影响更大:如果用户中心挂了,那么会影响到所有依赖于用户中心的系统;

  • 架构更为复杂:服务和服务之间彼此依赖,如果服务不断增多并且没有得到很好的治理,最终可能导致整个公司没有一个人能够了解所有的服务;

  • 运维更加困难:当出现问题时,查找问题也更加困难。

总之,系统要不要拆,要不要服务化,服务化到什么粒度,还需要从实际出发;脱离业务实际情况的架构都是耍流氓!



全部评论: 0

    我有话说:

    阅读为什么服务设计时候需要DDD?

    设计蓝图里为什么没有看到DDD影子呢?

    阅读」“完”和“好”区别

    工作中,“完”和“好”虽然仅一字之差,但前者只是完成了某项工作,而后者则不仅是完成了工作还有一个好

    阅读」推荐系统中信息增强小技巧

    实用推荐系统构建经验,如何进行信息增强。

    阅读」Dubbo 如何成为连接异构微服务体系最佳服务开发框架

    要实现异构微服务体系间共存或迁移,关键点打通异构体系间协议与服务发现,得益于 Dubbo 自身对协议、注册模型支持

    阅读」京东商城交易系统演进之路

    原文:https://www.toutiao.com/i6762874634867048963商城服务如图所

    阅读」移动端适配必须掌握基本概念和适配方案

    随着技术发展,移动设备越来越流行,并且不同设备间屏幕尺寸和屏幕像素差异,移动端开发面临着分辨率适配问题。

    阅读」图文并茂带你了解分布式架构演进

    初始阶段架构初始阶段 小型系统 应用程序、数据库、文件等所有资源都一台服务器上通俗称LAMP

    阅读」4大服务注册发现技术对比

    架构设计中 CAP 和 BASE 理论

    阅读」“来我公司技术总监吧” “要写代码吗?” “不写代码你来干嘛?”

    标题来源于一段真实对话,老赵,小李都是我朋友,我作为中间人介绍他们认识,我们约上海码农圣地--张江某咖啡馆。

    阅读】基于 Java Spring cloud开源线教育系统调试实战

    转载自:https://www.toutiao.com/i6759167063090004483开篇之前分享

    阅读」大众点评是如何分表分库

    原大众点评订单单表早就已经突破两百G,由于查询维度较,即使加了两个从库,优化索引,仍然存在很查询不理想

    阅读」亿级用户分布式数据存储解决方案

    分布式数据库和分布式存储是分布式系统中难度最大、挑战最大,也是最容易出问题地方。互联网公司只有解决分布式数据存储问题,才能支撑更次亿级用户涌入。

    阅读」如何构建可伸缩Web应用?

    可伸缩性已经成为Web应用程序DNA!

    阅读」轻松理解 Kubernetes 核心概念

    Kubernetes 迅速成为云环境中软件部署和管理新标准。

    阅读」Mysql调优你不得不知细节

    多数时候数据库会成为整个系统瓶颈

    阅读」阿里云-开放平台高级技术家教你搭建微服务架构四大金刚利器

    孔凡勇,花名云狄,阿里云-开放平台高级技术家,对高并发、高性能、高可用、可伸缩分布式系统架构设计有丰富经验,Cloud Native坚定拥护者,坚守开发一线打磨匠艺架构师。

    阅读」移动端事件穿透原理与解决方案

    本文将带你了解事件穿透及如何实际项目中选择合适方案解决事件穿透问题。

    阅读」分布式事务四种解决方案,成长需要尝试

    分布式事务指事务操作位于不同节点上,需要保证事务 AICD 特性。