云上软件架构
- 什么是云原生?
- 什么是12要素
- 云原生应该关注什么?
- 微服务架构
- 敏捷基础设施及公共基础服务
- 分布式架构设计
- 云原生程度的评判标准是什么?
- 云服务现在如何,未来怎么走?
什么是云原生
云原生的概念最早开始于 2010 年,在当时 Paul Fremantle 的一篇博客中被提及,他一直想用一个词表达一种架构,这种架构能描述应用程序和中间件在云环境中的良好运行状态。因此他抽象出了 Cloud Native 必须包含的属性,只有满足了这些属性才能保证良好的运行状态。当时提出云原生是为了能构建一种符合云计算特性的标准来指导云计算应用的编写。
后来到 2013 年 Matt Stine 在推特上迅速推广云原生概念,并在 2015 年《迁移到云原生架构》一书中定义了符合云原生架构的特征:12 因素、微服务、自服务、基于 API 协作、扛脆弱性。而由于这本书的推广畅销,这也成了很多人对云原生的早期印象,同时云原生也被 12 要素变成了一个抽象的概念。Matt Stine 认为在单体架构向 Cloud Native 迁移的过程中,需要文化、组织、技术共同变革。
12要素
2012 年,Heroku 创始人 Adam Wiggins 发布十二要素应用宣言。它为构建一个优雅的互联网应用,定义了需要遵循的一些基本原则和方法论,也广泛影响了众多的微服务应用架构。十二要素重点关注:应用程序的健康成长,开发者之间的有效的协作,以及避免软件架构腐化的影响。
- 基准代码:一份基准代码,多份部署,使用 GIT 或者 SVN 管理代码,并且有明确的版本信息。
- 依赖:显示声明依赖。
- 配置:环境中存储配置。
- 后端服务:把后端服务当作附加资源。后端服务是指程序运行所需要的通过网络调用的各种服务,如数据库(MySQL、CouchDB)、消息/队列系统(RabbitMQ、Beanstalkd)、SMTP 邮件发送服务(Postfix),以及缓存系统(Memcached)。
- 构建、发布、运行:严格分离构建和运行。
- 进程:以一个或多个无状态进程运行应用,如果存在状态,应该将状态外置到后端服务中,例如数据库、缓存等。
- 端口绑定:通过端口绑定提供服务,应用通过端口绑定来提供服务,并监听发送至该端口的请求。
- 并发:通过进程模型进行扩展,扩展方式有进程和线程两种。进程的方式使扩展性更好,架构更简单,隔离性更好。线程扩展使编程更复杂,但是更节省资源。
- 易处理:快速启动和优雅终止可最大化健壮性,只有满足快速启动和优雅终止,才能使服务更健壮。
- 开发环境与线上环境等价:尽可能保持开发、预发布、线上环境相同。
- 日志:把日志当作事件流,微服务架构中服务数量的爆发需要具备调用链分析能力,快速定位故障。
- 管理进程:把后台管理任务当作一次性进程运行,一些工具类在生产环境上的操作可能是一次性的,因此最好把它们放在生产环境中执行,而不是本地。
12 要素应用为我们提供了很好的架构指导,帮助我们: