去年参加技术分享活动,七牛的一个技术简要的介绍了一些高可用可伸缩的一些经验之谈,听完之后受益匪浅,整理一下,主要分以下几个部分:

  • 入口层高可用

  • 业务层高可用

  • 缓存层高可用

  • 数据库高可用

  • 入口层可伸缩

  • 业务层可伸缩

  • 缓存层可伸缩

  • 数据库可伸缩

iOS培训,Swift培训,苹果开发培训,移动开发培训
下面来分层介绍实践方法。

入口层高可用

nigix两个 keeplive保活 心跳做好。
iOS培训,Swift培训,苹果开发培训,移动开发培训

  • 使用心跳技术: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访问 , 而不是一个失败后就去另一个 。 所以如果一台机器当机 ,那么就有一半左右的用户无法访问 。

业务层高可用

iOS培训,Swift培训,苹果开发培训,移动开发培训

  • 业务层不要有状态 , 状态分散到缓存层和数据库层 。 只要没有状态,业务层的服务死掉后,前面的nginx会自动把流量打到剩下的服务 。 所以,业务层无状态是一个重点。

  • 友情提醒:不要因为想让服务无状态就直接用cookie session, 里边的坑有点大,考察清楚后再用比较好。比如重放攻击 。

缓存层高可用

iOS培训,Swift培训,苹果开发培训,移动开发培训

网友评论