阅读:大型网站技术架构.技术原理与案例分析(三)

Posted by 启示录 Blog on May 31, 2016

路由算法指通过算法分配用户最终访问的目标服务,例如分布式缓存集群,分布式数据库等。

最常见的是使用余数hash(hash()mod N):用缓存的key的hash值除以服务器数目(N),余数为服务器编号,同一数据的hash是不变的。数据相对固定。但是这是一种平衡场景,如果数据的key访问不平衡,会造成个别服务器压力猛增,而其他的却处于空闲。但是这种情况对于集群中某一台出现故障,需要重新计算。最终变成N- 1。那么对于缓存的数据需要重新计算,成本太大。如果选择这种方案,最好是选择在访问量少时更新服务器,并且能预热缓存

分布式一致性hash,先构造长度为2^32的整数环(一致性hash环「0,2^32-1」),查找方式通过二叉树实现。

「计算机的任何问题都可以通过增加一个虚拟层来解决」:java虚拟机、虚拟IP、虚拟机、虚拟DB

分库与分片的区别:前者是相对于数据库,后者相对于表

对于JOIN的查询语句进行SQL拆分,最后合并结果。分解数据访问逻辑

考量一个网站架构的伸缩性就看其设计是否走在业务发展的前面。在业务需要处理更多访问与服务之前就已经做好准备。

高手定律:100万商品的网站工程师考虑不到10亿个商品的网站工程师遇到的问题。没有解决不了的问题,只有无法遇到的问题。 救世主定律:遇到问题,分析问题,解决问题。切勿想通过找高手,就会像探囊取物一般。技术总是长期被低估,短期被高估。

为何有的公司发布产品,在产品发布日快要到来之际就像如临大敌一般。而有的公司却能持续发布迭代?这是一道考虑网站性能的题目,系统的可伸缩性、扩展性决定了发布时的状态。开闭原则(对扩展开放,对修改关闭)

应对复杂的系统,应该进行模块拆分。拆分分为纵向和横向两种。

纵向拆分:纵向拆分是相对于业务模块,例如交易应用,支付,商品等分为小应用,只供调用即可,业务剥离。 横向拆分:这个是从服务的角度讲,例如登录拆分出来,消息通知拆分出来。服务的复用。 对于一个大型的应用,纵向和横向是相互配合的。不只是单独存在。

开放平台是提升用户价值。通过增值价值带来收入