系统架构优化的几点建议!

背景

一家新公司,刚开始的因为业务功能单一,每每是单台服务器,单个 web server 就提供了全部功能。使用的用户也比较少,因此为了能够快速开发迭代上线,数据也全是放入数据中,如 mysql、mongo 中。当业务增多,用户增多时,这样的系统架构就不能知足需求了。这时候就须要作系统拆分和性能优化了。前端

系统拆分

通常拆分系统都是按功能模块拆分,好比在一个简单的电商项目,通常购物流程是浏览商品->下单->付款->发货->评价这么几个步骤。在最初的系统里,咱们为了快速的开发上线,可能全部的功能全放一个项目中实现。当商品或用户数量增多时,这样的系统架构是知足不了需求的,可能致使用户访问速度变慢,影响用户体验,直接致使用户流失。mysql

那这时候该怎么办呐?就像公司刚开始时,一个程序员既干前端的活又干后端的活,还有作测试和运维。当业务在高速发展时,他一我的一天就算上 24 小时都是干不完的。那怎么办?招人呗。在招个前端,测试,运维,本身专心作后端的工做。程序员

这个模式就能够搬到咱们的系统中来,由之前的一个系统,拆分为多个,那怎么拆才是合适的?web

这里我按功能来简单的拆分,分为用户系统、商品系统、订单系统、支付系统、物流系统和评价系统。用户系统用来提供登陆和鉴权相关服务,商品系统用来提供商品相关服务,订单系统用来提供订单相关服务,支付系统用来管理支付相关服务等等。redis

这样一来,由之前的单台服务升级为多台服务,每台服务提供本身的服务,分担服务器压力从而提高系统响应。算法

当服务在遇到,服务拆分后还须要横向扩展,就是把拆分后的服务部署多台,就比如一个部门招多我的同样。它的好处是提高系统的可用性和分担服务压力,更好的为用户提供服务。sql

系统优化

上面咱们聊到了系统拆分,实际上系统优化是和它并行的,或者说能够在系统拆分以前的。这里主要的优化是代码逻辑、慢SQL优化、部分逻辑同步转异步等等优化。后端

代码逻辑优化,好比删除一些不须要的代码,减小之前的多层嵌套循环,把循环的单个插入改成批量插入。主要是提高代码执行的效率,有多是空间换时间,有多是算法的优化等等。缓存

慢SQL优化,系统刚开始因为数据量小,用户量也少,SQL查询感受不到慢。当数据量和用户上去后,就会明显感受到查询变慢。一般 SQL 优化就是给常常须要查询的字段加索引,若是能够加联合索引的优先加联合索引。索引也不是越多越好,须要额外的空间存储索引,而且会影响插入删除等性能。性能优化

同步转异步,就是通知类的消息或者短信发送什么的,不是须要强同步的,最好用消息队列异步的方式实现,这样能够提高系统的响应。

缓存

对系统优化,一个很重要的手段,就是加缓存。咱们都知道内存的读取速度比硬盘快不少,经过空间换时间,来提高系统响应速度。在分布式系统中,通常使用分布式缓存,如 redis 等缓存,在使用中要主要数据一致性问题,特别是修改和删除数据时,要注意更新缓存。

除了用 redis 来缓存外,咱们还可使用本地内存来缓存一些基本不变的参数、配置等等。或者缓存访问频率很高的数据,不过要注意数据更新问题。

加了缓存,提高了系统的响应,相应的也给开发带来了复杂性,特别是数据的一致性,不过,为了系统的性能,这些复杂性也是必要的。

最后

我的以为,最好在系统刚开始设计的时候就多想下,按大的功能模块拆开,服务之间内部调用。这样的好处是当用户增加很快的时候,基本能够快速扩容,不用急着去重构,而且服务之间解耦和逻辑清晰。

提高系统的性能主要是拆分、代码优化和加缓存等,它们也能够一块儿进行,也能够分开进行,可根据实际状况而定。固然,若是项目周期容许的状况下,在开始开发的时候就考虑到这些,到用户真正上来时也不慌,直接加机器就能够抵御。

PS:
清山绿水始于尘,博学多识贵于勤。
微信公众号:「清尘闲聊」。
欢迎一块儿谈天说地,聊代码。

相关文章
相关标签/搜索