云计算操作系统的主要优点:
优势 | 说明 |
---|---|
易部署 | 利用Docker消除开发、测试和生产的差异性。实现快速部署,灰度发布和快速回滚 |
横向扩张(scaling) | 快速扩张增加实例数量,顶住突增的高并发流量 |
自动恢复(failover) | 当底层宿主机出现故障的时候,自动将应用“迁移”到其他宿主机上,确保服务不降级 |
高资源利用率 | 例如容器细粒度地划分宿主机资源,尽量多跑容器,提高资源利用率 |
另外我们可以将一般企业应用,按照同底层资源(内存和持久化)的耦合程度。说白了就是状态信息是否放在本地,例如使用Java session(内存)来保持用户的购物车信息,那么意味着这个用户每次访问都要被负载均衡转发到这台服务器上。负载均衡必须维护用户session和相 应服务器的对应关系,否则用户很可能下次登录到没有保存自己登录状态的服务器上,被踢出登录。
应用类型 | 技术架构 | 负载均衡 | 说明 |
---|---|---|---|
无状态应用 | Tomcat、Apache、Nginx | 不需要会话保持 | 用户状态保存在redis或者memcachd之类的缓存里 |
有状态应用 | Weblogic、EJB | 需要会话保持 | 用户状态保存在本机内存里面 |
本地持久化应用 | 各种传统数据库 | 需要会话保持 | 用户数据会在本地持久化 |
其中技术框架只是个例子,例如使用tomcat 的应用不一定就是无状态的,只是说相对于weblogic可能性更大一些。
我们看一下不同类型的应用,上云之后能够得到哪些好处:
快速部署 | 横向扩展 | 自动恢复 | 高利用率 | |
---|---|---|---|---|
无状态 | 是 | 是,可扩可缩 | 是,可以杀掉别处重启 | 是 |
有状态 | 是 | 可以扩,但是要慢慢缩(graceful stop) | 不能。容器没有了,用户的状态信息也会丢失 | 也许 |
持久化 | 是,但是要同步数据 | 无法扩展,除非是分布式数据库 | 不能。底层宿主机如果故障,持久化数据可能丢失。 | 否,一般数据库本身的负载就比较高,底层资源使用比较充分 |
我们看,一般互联网公司的软件架构已经实现了“三层架构”。业务逻辑实现无状态,用户状态放在缓存之中,而冷数据在保存在数据库里面。这样的应用的逻辑部分本身支持横向扩展,只要简单地Docker化并且进行配置分离,就可以快速上云。
传 统基于Weblogic和EJB的企业应用,则属于第二种情况。这些应用简单Docker化之后也可以放到Mesos之上,不过前端负载均衡往往要支持 HTTP会话保持。这种应用的逻辑部分可以做到横向扩展,反正新用户会转发到新的容器实例上。当要关掉容器的时候,必须采用graceful stop的方法,通知容器停止接收新请求,直到处理完所有请求之后自行销毁。具体EJB的横向扩展功能,在另外一个FaQ里面会详述。
至于数据库之类需要本地持久化的应用,一般采取将持久化部分挂载到本地存储(Docker的–v 参数),除非是底层存储也是分布式的,那么放到Docker里面的意义非常有限。