一期二班 - 吴水金 - 第四课作业
1. 数据库读写分离
在数据库读写操作中,写操作相对是比较耗时的,同时数据表在进行写入时是无法进行读取的。如果我们的应用中有大量并发的读操作和少量的写操作,那么很有可能这少量的写操作会阻碍大量的读取操作。因为数据表一旦进行写入操作,即所有关于该表的读操作都必须等待写操作完成后才能执行。再未做数据库读写分离之前,这将会成为应用的一个性能瓶颈。一个最基本的读写分离的数据库是一个用于读的数据库和一个用于写的数据库,两个数据库表结构完全一致,我们可以将用于写的数据库称之为主数据库,将用于读的数据库称之为从数据库。主数据库进行了数据写入后,会将最新数据同步到从数据库。因为读和写操作是针对的不同数据库,因此读和写相互不影响,这将大大提高数据库读写效率。缺点是最新数据的更新和同步频率有关,存在一定的延时。
2.CDN
内容分发网络。一个大型网络应用是针对所有的在线用户,这些用户广泛分布在不同的网络提供商的节点下面,由不同的网络提供商提供服务。CDN技术是指在网络提供商节点处设置内容缓存,主要是一些静态内容,例如首页,图片之类的,并且定期同步最新内容。这些节点广泛分布于全国各地,就组成了一个巨大的网路,称为内容分发网络。内容分发网络实现了请求分流,把原本应该向中心服务器发送的请求转向各个节点去处理,降低了中心服务器的压力,同时由于请求和响应的路由节点变少了(例如上海来的请求由上海的分发内容节点处理),请求的响应速度也变快了。缺点是内容分发网络增加系统结构的复杂性。
3.分布式缓存,分布式存储,分布式搜索
在大型互联网应用系统中,可伸缩性是系统必不可少的一个硬指标。分布式即是实现可伸缩性的关键步骤。分布式是这样一种技术:当系统的访问量增加,系统的计算资源和存储慢慢被消耗殆尽,系统面临资源不足时,我们可以在不改变系统架构的情况下,只是在现有架构中简单的增加硬件资源,从而达到增加系统性能的目的。比如当缓存服务器资源不足时,我们通过增加一台缓存服务器来提高性能。类似的,当存储和搜索资源出现瓶颈时,我们都可以通过增加服务器的方式来提高系统性能。分布式需要在前期架构时就考虑好服务器扩展策略,后期只根据前期指定的策略机械地增加硬件资源就行。
4.业务拆分
随着系统的越来越庞大,一个系统包含的功能越来越多,代码量也越来越大。代码的可读性会越来越差,这增加的开发的难度。同时,各个功能之间的耦合度越来越高,一个功能出现问题,可能导致整个系统都无法访问。而且,系统过于庞大,也不利于需求的快速变更和版本的快速迭代,从而降低开发效率。业务拆分是指将一个大的系统拆分成各个子系统,具体的包括系统拆分,数据库拆分,以及在系统结构上实现垂直化,产品化和服务化。子系统之间相互独立,一个子系统的崩溃不影响其他子系统对外提供服务,应用层通过向不同的子系统申请服务以完成相关的业务功能。这里的关键是如何拆分子系统,这需要根据系统的实际情况而定,以达到高性能,高可用,可伸缩性。
5.简化和监控
在对系统进行拆分时,很容易矫枉过正,子系统拆分得过细,会增加系统的复杂性。一个应用能够正常提供服务,有赖于各个子系统提供正常的服务,一个应用如果依赖过多的子系统,那么它的稳定性就会降低。因此需要简化系统结构。通过需要对各个子系统进行性能监控,从而掌握系统整体的运行情况,并能对未来性能瓶颈做出预测,提前做好准备。
版权声明: 本文为 InfoQ 作者【吴水金】的原创文章。
原文链接:【http://xie.infoq.cn/article/bf12c9c3de0399710132f23ce】。文章转载请联系作者。
评论