继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

构建高扩展性系统的建议(二)

moocer
关注TA
已关注
手记 12
粉丝 1.4万
获赞 537
横向扩展能力

横向扩展是相对于纵向扩展而言的,纵向扩展即通过增加硬件规模来增加系统容量,横向扩展是通过复制“服务”(业务服务、数据服务等)来增加系统容量(可以使用价格低廉的硬件资源或者基于云)。

一个显而易见的好处就是可以节省高端服务器的开支,当然你也可以认为这项支出没什么大不了的。毕竟是钱可以解决的问题,但是接下来的好处就不是用钱能解决的了。

横向扩展的另一个结果就是系统必须要拆分成一个个小的、相互独立的子系统,通过这种方式也可实现拆分和解耦。这样虽然会带来更多的跨系统交互,但是相对于所带来的好处来看,这点代价是完全值得的,且规模越大优势越明显。
那么怎么降低或解决跨系统交互带来的问题呢?——规范。接口定义规范、接口使用规范、接口更改规范、接口安全规范等等,通过定义上述规范病严格遵守,那么跨系统调用的问题就会在最大的程度上避免,仍然是那句话“规模越大优势越明显”,如果有疑问可以先试试再讨论。

降低了系统的维护难度。维护一个小系统的难度远远小于维护一个复杂且庞大系统的难度(如果你维护过这样高难度的系统,那么你的感受会更深一些),针对小系统的调整、bug修改甚至是重构都会变的更加容易,只要保证对外接口的稳定性即可。

最后一个需要注意的问题就是避免单点故障,任何一个服务都不能只部署在一个点,同时要处理好同一服务多点部署的负载均衡及故障屏蔽(更多依赖于服务化整体解决方案)。

正确使用缓存

缓存的涉及范围广、使用复杂度高,正确的使用缓存能在很大程度上提高系统的响应速度、减少用户等待时间,同时也能缓解应用服务器压力及数据库服务器压力。缓存可粗略分为页面缓存和数据缓存两大类。

页面缓存是位于web服务器之前的缓存服务器,通过缓存和响应之前生成的动态请求,从而降低最终落在web服务器上的请求数量。

CDN的出现及大规模使用,将静态页面(也包括动态页面的js、css等内容)部署在CDN服务器上,有助于分流高峰期站点流量,同时CDN也可以将请求发送到最适合的节点以带来响应速度的提升。CDN通过定期检查源服务器来更新内容,这样极大的降低了源服务器的压力,同时也降低了成本。

数据缓存即针对纯数据的缓存,可以是数据库(表)数据的拷贝,也可以是在此基础上加工并组装的具有某种业务含义的数据。数据缓存通畅也被称为对象缓存。
在使用数据缓存时,要特别注意数据有效期,当数据发生变化时要及时更新缓存,否则就会读到脏数据。由此可见,控制好缓存数据入口非常重要,这也说明(跨系统)接口调用的重要性,每种业务的缓存由该业务代码进行控制,其余系统仅通过接口调用方式使用其数据,避免因入口分散导致缓存数据更新不及时而引起的脏读。

【推荐】
构建高扩展性系统的建议(一)
构建高扩展性系统的建议(三)

打开App,阅读手记
5人推荐
发表评论
随时随地看视频慕课网APP