架构高质量高并发量系统 - 这个话题如果展开说,估计能写好几本书了。所以作为一个能够能在10分钟内读完的小短文,尽量的把点都写到,以后的文章会从点覆盖到面,逐渐讲解每个细分领域。
我们就拿电商系统做例子吧,如果从零开始搭建一个电商平台,我们可以分为以下几个部分:管理后台、用户前台;如果有APP的话还有接口等等。数据库用MySql,缓存的话用Redis好了,这样一个最简单的电商系统就搭建好了。
逐渐的用户多了,需求也多了,各个系统就要拆分了:管理后台除了管理商品、订单,还要看报表,如果有第三方商户入驻的话还有第三方后台;为了更好的追踪客户我们还要有日志系统,和第三方商户结算还要有清算系统,这时候我们按照微服务进行了系统拆分,把它拆成不同的子系统。
当数据量和访问量都超大的时候,我们就不能光从需求角度去完善系统了。而是要从工程学和数学角度去架构系统 - 这时候架构师的概念就出现了。这个差别就和村里修条大马路和规划整个一个城市一样大:请慢慢看。
首先是规划上的准备:我们要从几个方面入手进行规划:
1、业务系统规划
2、分布式架构管理架构、配置、监控、消息中间件等选型
3、搭建存储和数据仓库
4、如何确保系统、数据安全性
5、如何确保网络及服务稳定性
6、如何提高系统高可用性、可扩展性、可维护性
7、人员和硬件如何配备
首先是公司的商业模型,推导出业务系统是什么样子的。对于我们目前的业务,能够水平拆分,也能垂直拆分。什么意思呢,一个订单系统,业务增长后,我们可以拆成支付、日志、订单处理等等子系统;这是垂直按业务拆分。每个系统都要读取数据库、做缓存等等。有的子系统耗费资源大,我们要做读写分离,把这个子系统同步一套数据库出来使用,就是水平拆分。拆分原则我们要依据业务的可伸缩性,扩展性等等,这里需要架构师对业务的把握和了解。
然后,我们就需要考虑分布式架构选项的问题了。幸好我们有好几套方案可以备选,这里我们还是要看主营业务是什么。如果是以视频为主的业务,比如爱奇艺、优酷等网站,对内容分发有着极高要求,对CDN架构就很有要求。而电商的峰值流量高,动态请求多,我们可以选择微服务架构。不管使用哪种架构,我们的治理工具都可以是一样的,可以选择Spring Cloud这种高度集成分布式组件的架构模型。
业务增长带来的必然是数据增长。电商业务平台,一条商品可能会有大概10~20条数据记录,图片大概5~10张,占用的存储空间是3~10M;一条订单可能会涉及到30~50张表的读写,这样的数据量级假设每天都是几百万条数据增长,MySQL数据库是很难消化的。这并不是说MySQL装不下这么多的数据,而是当MySQL的存储数据达到一定瓶颈时(大概千万条左右),它的读取速度会明显下降。所以我们有必要对数据库进行水平拆分,按照业务进行分片处理。我们需要了解类型MyCat一类的分片工具。
同时,产品部门和运营部门的需求也过来了。数据除了要做业务处理,还要进行提取形成报表,一个客户是什么样子的,我们要进行数据挖掘;从一大堆分片的MySQL库里捞取数据可不是件容易的事情 - 我们就必须有大数据的解决方案,这时候就要考虑Hadoop的大数据存储和读取方案了。Hadoop也有好几个商业版本可以选择。包括Apache 、Cloudera、IBM、华为等等都有不错的商业产品。
有时候,比如双11,我们要实时的观测数据,而Hadoop的数据报表不能满足实时性要求,这就需要有流式计算工具来帮忙了。比较常用的有Stome、Heron等等方案。流式计算的要点就是所有计算都是在内存中完成,这样可以极大的调用服务器资源,节约了运算时间。
好了,现在我们的配备应付复杂一点的需求,高并发流量、处理大数据应该都没什么问题了,但是 - 系统复杂度高了,带来的影响就是整体可靠性下降了。作为一个架构师,你可能正在做的工作不是在办公室里喝茶,而是-到处灭火:xxx下了订单怎么没发货呀,xxx的服务挂了请马上重启下 - 所以我们需要一套LA的方案来提高系统整体稳定性。
首先说,系统整体的稳定性是扎根于每个独立子系统的稳定性之上的。只有每个子系统都是完美运行,整个业务系统才能稳定如初。不过这是最理想情况。每天的业务可能都不是线性增长的,可能会突然来一个峰值把机器干趴了。某个子系统趴窝了重启下还好,如果是分布式组件,比如Zookeeper一类的中间件趴窝了,连带着相关业务可能都会出现问题 - 我们需要首先对分布式组件进行HA或者LB构筑。基本上所有分布式组件都是可以基于Master-Slave进行架构的。Master节点是Active-Standby架构可以自动故障转移,Slave节点任何故障都会被Master节点感知到同时自动重试计算任务。这样的话可以感知峰值,同时转移运行压力。
现在我们的系统得到了加固,里面存放的数据资料很多 - 也很值钱,要知道最近互联网发生的安全案件可不少,作为互联网公司不仅防黑客还得防内鬼。所以数据安全就必须提到日程上来。
从大的方面来说,安全是一个意识。不仅仅是技术安全部门的事情。公司员工的私人邮箱、员工的U盘等等理论上都不可以存放敏感数据。这需要一系列安全软件和管理制度的配合。还有呢就是网络安全,黑客入侵的第一道关卡就是网络。除了在网络入口提高安全措施,还要在每台服务器节点上进行安全防范。
最重要一点,就是数据。假设你存放的数据都是金额一类的,能够接触数据的人都能修改金额,那公司肯定赔到家了。所以除了要有线上数据的管理,还得有数据内容的防范。一个金额数据,必须有相关的流水数据辅助支撑;甚至金额本身都需要加密储存。我们和外界的任何接口数据,也必须是加密的,这个就不用多说了。
这时候,我们有了各种的服务,还有大量的服务器 - 要知道流式服务一次可能就要消耗十几台服务器的资源。但是这些服务并不是长期处于峰值,如果每个服务都配备一堆服务器,而每天只有很短暂时间进行峰值计算,系统整体计算水平很低,那么系统资源浪费就很严重了。
这就需要考虑服务器资源调度问题,这里也有几个方案可以选择,比如TBSchedule,一听就是淘宝开发的 - 是一款非常优秀的高性能分布式调度框架。它使用了ZooKeeper来实现任务调度的高可用和分片,以长连接形式和服务器保持通讯,定时扫描当前服务器的数量,重新进行任务分配。
说了那么多,肯定有没说到的地方,最后说说系统里最关键的一部分吧 - 人。很多架构师是技术大牛,同样也是管理天才。技术里面很多管理是相通的,这就需要组建一个合理的适用于企业发展的技术-产品-运营组织结构。
企业组织结构中,通常会有几种组织结构:一种是职能部门划分,比如说:技术部、产品部;另外一种是按项目划分:商城小程序开发组,商城后台开发组等等。每个组大大小小,包括了产品经理、程序员等等。这两种组织结构混合起来,就是矩阵型组织结构。这样的好处就是简化了沟通成本,每次小组的组合,就是以项目为目的,目标明确。
矩阵式组织结构中的跨部门管理
但是互联网企业最重要的成本是什么?时间!简化沟通成本,缩短交付时间,那就是节约了最大成本。所以敏捷开发大行其道。简单来说就是对「需求」「迭代」「缺陷」等环节进行细致管理,缩短文档和交流过程,灵活应对客户需求。
很多运维、开发、测试等等环节也很重要,比如自动化测试、自动化部署等等。很多大的公司,比如谷歌等,设立了一套完整的开发 - 测试模型,依靠这种模型他们的开发上线时间和成本能缩短很多。
10分钟很短,本文也很短。具体怎么实施,关注本公众号,后面的文章会慢慢道来。
领取专属 10元无门槛券
私享最新 技术干货