云计算

什么是云计算?

这是AWS官方的解释:

云计算通过互联网按需提供 IT 资源,并且采用按使用量付费的定价方式。您可以根据需要从诸如 Amazon Web Services (AWS) 之类的云提供商那里获得技术服务,例如计算能力、存储和数据库,而无需购买、拥有和维护物理数据中心及服务器。

特点:

  • 敏捷性
    • 云使您可以轻松使用各种技术,从而可以更快地进行创新,并构建几乎任何可以想象的东西
  • 弹性
    • 云使您可以轻松使用各种技术,从而可以更快地进行创新,并构建几乎任何可以想象的东西
  • 节约成本
    • 云技术将您的固定支出(如数据中心和物理服务器)转变为可变支出,并且只需按实际用量付费

云计算模型:

基础设施即服务 (IaaS)

基础设施即服务有时缩写为 IaaS,包含云 IT 的基本构建块,通常提供对联网功能、计算机(虚拟或专用硬件)以及数据存储空间的访问。基础设施即服务提供最高等级的灵活性和对 IT 资源的管理控制,其机制与现今众多 IT 部门和开发人员所熟悉的现有 IT 资源最为接近。

平台即服务 (PaaS):

平台即服务消除了组织对底层基础设施(一般是硬件和操作系统)的管理需要,让您可以将更多精力放在应用程序的部署和管理上面。这有助于提高效率,因为您不用操心资源购置、容量规划、软件维护、补丁安装或与应用程序运行有关的任何无差别的繁重工作。

软件即服务 (SaaS)

软件即服务提供了一种完善的产品,其运行和管理皆由服务提供商负责。人们通常所说的软件即服务指的是终端用户应用程序。使用 SaaS 产品时,服务的维护和底层基础设施的管理都不用您操心,您只需要考虑怎样使用 SaaS 软件就可以了。SaaS 的常见应用是基于 Web 的电子邮件,在这种应用场景中,您可以收发电子邮件而不用管理电子邮件产品的功能添加,也不需要维护电子邮件程序运行所在的服务器和操作系统。

云计算部署模型

公有云(Public Cloud)

基于云的应用程序完全部署在云中且应用程序的所有组件都在云中运行。云中的应用程序分为两种,一种是在云中创建,另一种是从现有基础设施迁移到云中以利用云计算的优势。基于云的应用程序可以构建在基础设施组件上,也可以使用较高级别的服务,这些服务提供了从核心基础设施的管理、架构和扩展要求中抽象提取的能力。

私有云(Private Cloud)

使用虚拟化和资源管理工具在本地部署资源往往被称作“私有云”。本地部署无法提供云计算的诸多优势,但有时采用这种方案是为了能够提供专用资源。大多数情况下,这种部署模型与旧式 IT 基础设施无异,都通过应用程序管理和虚拟化技术尽可能提高资源利用率。

混合云(Hybird Cloud)

混合部署是一种在基于云的资源和非云现有资源之间连接基础设施和应用程序的方法。混合部署最常见的方法是在云和现有本地基础设施之间将组织的基础设施扩展到云中,同时将云资源与内部系统进行连接

什么是云原生

https://12factor.net/zh_cn/

https://wiki.teamssix.com/cloudnative/#_0x02-%E4%BA%91%E5%8E%9F%E7%94%9F%E5%AE%89%E5%85%A8

核心

微服务

https://www.topgoer.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E8%AE%A4%E8%AF%86%E5%BE%AE%E6%9C%8D%E5%8A%A1.html

微服务设计的六大原则

1.高内聚,低耦合
每个服务针对单一的业务负责,而且耦合性很低,不依赖外部服务
2.高度自治
能够独立开发部署和发布,独立的部门业务
3.以业务为中心
每个服务代表了特定的业务
4.弹性设计
可容错性强,可降级,熔断,防止雪崩等
5.日志与监控
能够快速定位错误,以及即使通知异常
6.自动化

容器,容器编排

简单理解:Docker + K8s

服务网格

微服务技术架构实践中主要有侵入式架构和非侵入式架构

  • 侵入式:服务框架侵入程序代码,开发者组合各种组件。
  • 非侵入式:以代理的形式,与应用程序部署在一起。
    为了解决微服务框架侵入性的问题,引入Service Mesh

服务网格核心在于将客户端 SDK 剥离,以 Proxy 组件方式独立进程运行,每个服务都额外部署这个 Proxy 组件,所有出站入站的流量都通过该组件进行处理和转发。
服务网格

Service Mesh
可以将它比作是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。对于编写应用程序来说一般无须关心 TCP/IP 这一层(比如通过 HTTP 协议的 RESTful 应用),同样使用 Service Mesh 也就无须关心服务之间的那些原本通过服务框架实现的事情,比如 Spring Cloud、Netflix OSS 和其他中间件,现在只要交给 Service Mesh 就可以了。
https://philcalcado.com/2017/08/03/pattern_service_mesh.html
Service Mesh 有如下几个特点:

  • 应用程序间通信的中间层
  • 轻量级网络代理
  • 应用程序无感知
  • 解耦应用程序的重试/超时、监控、追踪和服务发现

DevOps

DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
DevOps 的两个核心理念是 CI(持续集成)和 CD(持续交付/部署)。

持续集成(CI)

重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生。

持续交付(CD)

持续交付是持续集成的延伸,将集成后的代码部署到类生产环境,确保可以以可持续的方式快速向客户发布新的更改。如果代码没有问题,可以继续手工部署到生产环境中。

持续部署(CD)

是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。但最终是否需要发布仍然需要人工操作。

为什么需要DevOps?
软件开发过程可采用大量手动操作,但这会导致大量代码错误。开发团队和运营团队可能常常信息不同步,而这可能会拖慢软件交付速度,辜负企业利益干系人的期望。DevOps 在软件开发、部署和维护所涉的全部任务中都可提高效率。

将开发和运营连接起来可增强可视性、使需求更为准确、改善沟通并加快上市。

CICD 工具选择

  • Travis CI
  • Jenkins
  • Gitlab CICD
  • Github Actions