六、阶段四:数据库压力变大 , 数据库读写分离架构演变到上面的阶段 , 并不是终点 。通过上面的设计 , 应用层的性能被我们拉上来了 , 但数据库的负载也在逐渐增大 , 那如何去提高数据库层面的性能呢?有了前面的设计思路以后 , 我们自然也会想到通过增加服务器来提高性能 。但假如我们单纯的把数据库一分为二 , 然后对于数据库的请求 , 分别负载到两台数据库服务器上 , 那必定会造成数据库数据不统一的问题 。所以我们一般先考虑将数据库读写分离 。

文章插图
这个架构设计的变化会带来如下几个问题:
- 主从数据库之间的数据需要同步(可以使用 MySQL 自带的 master-slave 方式实现主从复制 )
- 应用中需要根据业务进行对应数据源的选择( 采用第三方数据库中间件 , 例如 mycat )

文章插图
八、阶段六:引入缓存机制缓解数据库的压力?然后 , 随着访问量的持续不断增加 , 逐渐会出现许多用户访问同一内容的情况 , 那么对于这些热点数据 , 没必要每次都从数据库重读取 , 这时我们可以使用到缓存技术 , 比如 redis、memcache 来作为我们应用层的缓存 。另外在某些场景下 , 如我们对用户的某些 IP 的访问频率做限制 , 那这个放内存中就又不合适 , 放数据库又太麻烦了 , 那这个时候可以使用 Nosql 的方式比如 mongDB 来代替传统的关系型数据库 。

文章插图
九、阶段七:数据库的水平/垂直拆分我们的网站演进的变化过程 , 交易、商品、用户的数据都还在同一 个数据库中 , 尽管采取了增加缓存 , 读写分离的方式 , 但是随着数 据库的压力持续增加 , 数据库的瓶颈仍然是个最大的问题 。因此我 们可以考虑对数据的垂直拆分和水平拆分 。

文章插图
垂直拆分:把数据库中不同业务数据拆分到不同的数据库 。
水平拆分:把同一个表中的数据拆分到两个甚至更多的数据库中 , 水平拆分的原因是某些业务数据量已经达到了单个数据库的瓶颈 , 这时可以采取将表拆分到多个数据库中 。

文章插图
十、阶段八:应用的拆分随着业务的发展 , 业务量越来越大 , 应用的压力越来越大 。工程规模也越来越庞大 。这个时候就可以考虑将应用拆分 , 按照领域模型将我们的用户、商品、交易拆分成多个子系统 。

文章插图
?这样拆分以后 , 可能会有一些相同的代码 , 比如用户操作 , 在商品和交易都需要查询 , 所以会导致每个系统都会有用户查询访问相关操作 。这些相同的操作一定是要抽象出来 , 否则就是一个坑 。所以通过走服务化路线的方式来解决 。

文章插图
那么服务拆分以后 , 各个服务之间如何进行远程通信呢? 通过 RPC 技术 , 比较典型的有:dubbo、webservice、hessian、http、RMI 等等 。前期通过这些技术能够很好的解决各个服务之间通信问题 , 但是 , 互联网的发展是持续的 , 所以架构的演变和优化也还在持续 。
十一、总结通过本文 , 我们通过一个电商的案例 , 就了解到了分布式架构的演进过程 , 一环套一环 , 环环紧密相扣 。都是通过业务量和访问量的提升来考虑重构架构设计 , 以便能够适应当前的环境 。不可一蹴而就 , 也急不来 , 初创企业必须稳扎稳打 , 一步一个脚印的走出一条专属自己的路 。加油 , everybody!
推荐阅读
- C/C++服务器开发常用的7大开源库,让你在同行中脱颖而出
- 常见的JVM参数配置
- 茶叶揉捻之学理,普洱茶揉捻工序的目的
- 20个MySQL高性能架构设计原则
- 茶叶与英国习俗,茶叶对英国社会产生的影响尤其深远
- 端茶送客人走茶凉否,国内茶业面临有名茶无名牌的状况
- Linux下几个与磁盘空间和文件尺寸相关的命令
- 橙子茶怎么做,蜂蜜橙子茶的做法
- 陈年蜜茶的功效与作用,陈年茶油的功效与作用
- 电脑蓝屏怎么办?你要的解决方案都在这里
