去年参加技术分享活动,七牛的一个技术简要的介绍了一些高可用可伸缩的一些经验之谈,听完之后受益匪浅,整理一下,主要分以下几个部分:
入口层高可用
业务层高可用
缓存层高可用
数据库高可用
入口层可伸缩
业务层可伸缩
缓存层可伸缩
数据库可伸缩
下面来分层介绍实践方法。
入口层高可用
nigix两个 keeplive保活 心跳做好。
使用心跳技术:keeplive提供这个技术
比如机器A IP是1.2.3.4,机器B IP是1.2.3.5,那么再申请一个IP (1.2.3.6)我们称之为心跳IP,平时绑定再A上面,如果A宕机,那么IP会自动绑定到B上面
DNS 层面绑定到心跳IP即可
两台机器必须在同一网段
服务监听必须监听所有IP,如果仅仅监听心跳IP,那么从机上的服务(不持有心跳IP的机器)会启动失败
服务器利用率下降(混合部署可以改善这一点)
考虑一个问题,两台机器,两个公网IP,DNS把域名同时定位到两个IP,这算高可用吗
不算,客户端(比如浏览器) 解析完后会随机选一个 IP访问 , 而不是一个失败后就去另一个 。 所以如果一台机器当机 ,那么就有一半左右的用户无法访问 。
业务层高可用
业务层不要有状态 , 状态分散到缓存层和数据库层 。 只要没有状态,业务层的服务死掉后,前面的nginx会自动把流量打到剩下的服务 。 所以,业务层无状态是一个重点。
友情提醒:不要因为想让服务无状态就直接用cookie session, 里边的坑有点大,考察清楚后再用比较好。比如重放攻击 。
缓存层高可用