通过云服务构建企业级应用

132 阅读23分钟

对于一些中小型互联网公司来说,我们通常使用云厂商为我们提供的IaaS,PaaS服务来降低运维成本,使用也很方便,拥有较为完善的监控告警机制,同时为我们提供了高可用服务。本篇文章我们将以阿里云为例,介绍通过云服务构建企业级应用。

1. 概述

对于如何通过云服务构建企业级应用这个命题,我们可以看下面这张架构设计图(这张图介绍了主流的前后端分离架构,需要通过哪些云服务进行部署上线)。 架构图

  • 首先用户访问我们网站时需要通过域名,这时我们就需要注册购买域名,在网信办对域名进行备案
  • 域名解析之后呢就会进入CDN缓存,CDN是一个可选服务。
  • CDN之后是WAF防火墙服务,属于安全性服务,这个也是一个可选服务。
  • 防火墙之后是安全组,这是云服务厂商免费提供的一层防护,我们可以选择对应服务器的端口是否暴露
  • 安全组之后就属于我们整个网站的服务了,在我们的网站中除了必要暴露的服务之外,其它服务之间可以使用统一的VPC服务,基于内网通信,无需暴露端口给外网。
  • 在我们网站内部第一关就是负载均衡,如果是单节点就不需要,如果是多节点,就需要。负载均衡有利于我们进行灵活的扩缩容。
  • 图上是前后端分离项目的部署方式,前端是一组ECS,后端也是一组ECS,如果我们的项目在个别时间出现流量突涨可以使用ESS进行弹性扩展
  • 我们的后端一般会涉及到一些资源存储,我们就可以使用OSS对象存储/文件存储NAS,Redis缓存,RDS for MySQL数据库,MNS消息队列, 它们开箱即用,也可以提供主备,高可用相关功能。
  • 如果是微服务项目,也有API网关,注册中心,链路追踪,可观测监控等服务可以选择。

2. 资源管理

资源管理服务是一系列支持企业IT治理的资源管理产品集合。其中主要产品为资源组和资源目录。资源管理服务支持按照业务需要搭建适合的资源组织关系,使用目录、资源夹、账号、资源组分层次组织与管理您的全部资源。

如下图所示,我们就可以根据不同的项目建立不同的资源组,然后可以邀请项目组的负责人,或者是对应服务的负责人加入,设置对应的角色权限,共同管理项目。

3. 访问控制

RAM访问控制是阿里云提供的一项管理用户身份与资源访问权限的服务。

统一管理访问身份及权限

  • 集中式访问控制
    • 集中管理RAM用户:管理每个RAM用户及其登录密码或访问密钥,为RAM用户绑定多因素认证MFA(Multi Factor Authentication)设备。
    • 集中控制RAM用户的访问权限:控制每个RAM用户访问资源的权限。
    • 集中控制RAM用户的资源访问方式:确保RAM用户在指定的时间和网络环境下,通过安全信道访问特定的阿里云资源。
  • 外部身份集成
    • 单点登录SSO(Single Sign On):支持阿里云与企业身份提供商IdP(Identity Provider)进行用户SSO或角色SSO,使用企业IdP中的账号登录阿里云。
    • 钉钉账号集成:为RAM用户绑定一个钉钉账号,然后就可以使用该钉钉账号登录阿里云。
    • SCIM用户同步:通过SCIM协议将企业内部账号同步到RAM。

RAM支持用户、用户组、角色,可以对用户组进行授权,可以通过角色授权。

用户访问主要有两种方式控制台访问Open API访问

4. 网络资源

4.1. VPC专有网络

专有网络(Virtual Private Cloud,简称VPC),帮助您基于阿里云构建一个逻辑隔离的云上数据中心。专有网络由逻辑网络设备(如虚拟路由器,虚拟交换机)组成,可以通过专线/VPN等连接方式与传统数据中心组成一个按需定制的网络环境,也就是局域网,可通过内网IP通信。

创建VPC,需要指的VPC所在的区域,然后设置IP网段,根据我们的需要,IP网段的设置决定我们有多少个内网IP可用。

具体的计算规则是192.168.0.0/16,如果我们子网掩码是16,那么划分的IP数量就是2^(32-16)个,如果是10.0.0.0/8,那么划分的IP数量就是2^(32-8)个,如果是172.16.0.0/12,那么就是2^(32-12)个。

然后我们还可以通过添加交换机(switch)划分子网,也是相当于分机房,我们可以分成一个大机房,也可以分成若干子机房,划分原则和我们VPC一样,主要是分IP,16划分成24就可以分2^(24-16)个机房,然后每个机房2^(32-24)个IP。

下面的图片就是一个很典型的案例,我们的局域网最大支持65536个IP,划分了256个机房,每个机房256台机器。

4.2. 安全组

安全组是阿里云服务(ECS)为我们提供的免费的防火墙服务。

支持屏蔽或者开启端口和IP地址,默认开放80,443,22等。

安全组分为普通安全组和企业安全组,普通安全组要求不严格,入方向是拒绝的,出方向是允许的;企业安全组出入都是拒绝的,同一个安全组不同的机器默认不通,需要自己配置规则。

4.3. NAT网关

NAT 网关(NAT Gateway)是一款网络地址转换网关,通过转换和隐藏云服务地址,防止地址直接暴露,显著提升网络安全性。

NAT网关需要有公网IP才可以使用。

产品优势:

  • 安全: NAT网关的SNAT功能具有安全防护的能力,避免地址对外暴露,通过SNAT规则限制入向连接,精细化出向规则管控。
  • 弹性高性能: 自动弹性伸缩,随业务弹性扩容,满足流量陡增;超高性能,满足超大业务上云需求。
  • 稳定高可用: 支持主备可用区容灾,可用区级别故障时仍能保障业务运行,实现业务高可用。
  • 灵活计费: 按量付费,降低使用成本,共享公网IP资源,节省公网带宽和IP持有成本。
  • 深度可观测: 丰富多维度的流量监控指标,支持会话日志、VPC流日志,满足用户合规、运维诉求。

使用步骤:

购买NAT网关->绑定EIP->设置SNAT/DNAT规则

SNAT/DNAT规则:

  • SNAT(向外访问)为专有网络内无公网IP的云服务资源提供访问公网的代理服务。
  • DNAT(向内访问)将公网NAT网关上绑定的弹性公网IP(Elastic IP Address,简称EIP)映射给专有网络内的ECS实例或不具备公网IP的云服务资源使用,使其可以面向公网提供服务。通过不同端口来映射不同内网IP。

4.4. 高速通道CEN

云企业网CEN(Cloud Enterprise Network)是运行在阿里云私有全球网络上的一张高可用网络。云企业网通过转发路由器TR(Transit Router)帮助您在跨地域专有网络之间,专有网络与本地数据中心间搭建私网通信通道。简而言之,就是打通不同地区【比如:北京和杭州】VPC的网络(VPC需要不同的网段)。

创建VPC互联步骤:

创建云企业网实例->创建转发路由器->创建网络实例连接->配置跨地区宽带包

可以将同账号甚至是不同账号的VPC网络进行关联。

此外还有VBR上连,可以打通本地机房和云上机房网络。

4.5. HTTPS

想要使用HTTPS首先需要申请SSL证书,证书有免费的也有付费的。

我们可以选择对应的资源服务器进行(SLB、CDN、ECS...)证书绑定。

5. 计算资源

5.1. ECS云服务器

云服务器ECS(Elastic Compute Service)是性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。

在选购ECS时,我需要经历以下几个步骤。

  • 第一步是基础配置,选择付费形式(包年包月,按量付费,抢占式),紧接着是选择地区和可用区,例如华东1,可用区D,然后是具体的配置,再是操作系统,硬盘。
  • 第二步是设置网络和安全组,网络可以设置自己的专有网络,分配公网IP,按流量计费,设置安全组。
  • 第三步是系统设置,也就是对linux设置密码,主机名称等。
  • 第四步是分组设置,就是选择我们对应属于哪个资源组。
  • 第五步是确认订单,就是对我们之前的选择进行二次确认,发现问题,返回调整。

5.2. ECI

弹性容器实例(Elastic Container Instance)是敏捷安全的Serverless容器运行服务。您无需管理底层服务器,也无需关心运行过程中的容量规划,只需要提供打包好的Docker镜像,即可运行容器,并仅为容器实际运行消耗的资源付费。

ECI支持无缝集成Kubernetes,可以为Kubernetes提供一种层次化的解决方案:即ECI负责底层Pod容器资源的调度和管理工作,Kubernetes在ECI之上作为PaaS层来管理业务负载。云容器服务产品的整体架构如下图所示。

5.3. ESS弹性伸缩

在业务需求增长时,弹性伸缩自动增加指定类型的实例(即ECS实例或ECI实例),来保证计算能力;在业务需求下降时,弹性伸缩自动减少指定类型的实例(即ECS实例或ECI实例),来节约成本。当您的业务需求量有波动时,弹性伸缩能够帮助您自动调整指定类型的实例数量,以满足业务需求。

工作原理如下:

首先要监控我们业务服务的性能,监控的业务服务被称为一个伸缩组,根据性能可以进行判断是加机器还是减机器。新增加的机器与原服务保持一致,同时可以与负载均衡相连接。

使用流程:

创建伸缩组->创建伸缩配置->启动伸缩组 ->创建伸缩组规则->创建定时任务/创建报警任务

  • 创建伸缩组 设置伸缩组名称,类型(ECS/ECI),可以选择模版(已有实例可以作为模版),配置伸缩规则,移除策略,最小实例数,最大实例数,默认冷却时间300s(多长时间检测一次),然后选择网络类型,扩容策略,回收模式,添加已有实例,关联负载均衡,最后启动伸缩组。
  • 创建伸缩规则 指定规则名称,规则类型(简单、步进【根据报警增加】、目标追踪【根据报警增加】、预测【根据报警增加】),监控类型(系统监控,自定义监控),执行操作,时间。
  • 创建报警任务 指定名称,监控资源,监控项(CPU、内存,连接数...),监控周期、统计方法【所有机器的值】(最大值>=值)重复次数,触发规则。【定时任务是根据业务高峰时间增减机器】

6. 数据库

6.1. RDS数据库

RDS支持MySQLSQL ServerPostgreSQLMariaDB引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,帮助我们解决数据库运维的烦恼。

在选购RDS时,我们需要经历以下几个步骤。

  • 第一步基础资源设置,我们需要选计费方式(包年包月,按量付费,PolarDB),然后选择区域,选择数据库类型版本(MySQL,SQL Server、PostgreSQL,MariaDB),系列(基础版,高可用版,三节点版),然后选区域,选择对应的规格配置。
  • 第二步实例配置,选择VPC以及交换机,选择升级策略,选择资源组,查看当前配置。
  • 第三步确认订单,就是对我们之前的选择进行二次确认,发现问题,返回调整。

RDS提供了非常友好的界面,我们可以对MySQL进行管理。例如设置账号,分配权限;新建数据库,将数据库授权给用户;设置备份恢复;数据库连接;设置白名单

6.2. NoSQL数据库

NoSQL数据库支持云Redis、MongoDB等。

7. 存储资源

7.1. 块存储

块存储就是指我们ECS上挂载的云盘(数据盘、系统盘)。

7.2. nas文件存储

nas存储类似于nfs(web配置,命令进行挂载),并发支持不高,容量有限10PB。

支持nfs、smb两个协议

nas的使用:

  • 开通nas服务
  • 挂载

在服务中安装nfs yum install -y nfs-utils

mount -t nfs 地址 文件位置

7.3. oss对象存储

oss存储与文件存储类似,使用方式是程序代码通过调用云服务接口,支持高并发,cdn缓存,容量无限。

程序代码中通过ram AccessKey【AK】(id和secret)访问。

bucket【桶】代表oss对象存储。主要分为标准存储、低频存储、归档存储。

应用连接oss,需要有访问oss的ram子账号,创建好oss的bucket,程序代码配置。

在我们Java应用中,需要依赖oss存储的SDK,然后进行相关存储逻辑的编写。

8. 负载均衡SLB

分为clb、alb、nlb,还有自建负载均衡,ECS+Nginx+Keepalived+havip搭建。

8.1. CLB

传统型负载均衡CLB(Classic Load Balancer):支持TCP、UDP、HTTP和HTTPS协议,具备良好的四层处理能力,以及基础的七层处理能力。

CLB有如下特点:

  • 高可用: 采用全冗余设计,无单点,支持同城容灾。根据流量负载进行弹性扩容,在流量波动情况下不中断对外服务。
  • 可扩展: 您可以根据业务的需要,随时增加或减少后端服务器的数量,扩展应用的服务能力。
  • 低成本: 与传统硬件负载均衡系统高投入相比,成本可下降60%。
  • 安全: 结合云盾,可提供5 Gbps的防DDoS攻击能力。
  • 高并发: 集群支持亿级并发连接,单实例最大支持100万并发。

CLB对进入流量的处理如下所示:

  1. TCP/UDP协议和HTTP/HTTPS协议的流量都需要经过四层集群进行转发。
  2. 四层集群内的每一台节点服务器均匀地分配海量访问请求,并且每一台节点服务器之间都有会话同步策略,以保证高可用。
    • 如果相应的CLB实例服务端口使用的是四层协议(TCP或UDP),那么四层集群内每个节点都会根据CLB实例的策略,将其承载的服务请求按策略直接分发到后端云服务器 ECS(Elastic Compute Service)。
    • 如果相应的CLB实例服务端口使用的是七层HTTP协议,那么四层集群内每个节点会先将其承载的服务请求均分到七层集群,七层集群内的每个节点再根据CLB策略,将服务请求按策略最终分发到后端ECS服务器。
    • 如果相应的CLB实例服务端口使用的是七层HTTPS协议,与上述HTTP处理过程类似,差别是在按策略将服务请求最终分发到后端ECS服务器前,先调用Key Server进行证书验证及数据包加解密等前置操作。

创建步骤:

  • 第一步选择地域和可用区,选择是否多区可用。
  • 第二步设置实例名称,选择实例规则(并发数),选择实例类型(公网、私网),选择IP版本,选择计费方式
  • 第三步选择资源组。

使用步骤:

  • 第一步需要配置使用协议(TCP、UDP、HTTP、HTTPS)和监听端口,支持在高级配置中,配置负载均衡算法加权轮询、轮询。
  • 第二步设置后端服务器,可以选择具体的服务器(虚拟服务器组,类似nginx可以有多个upstream,默认服务器组,只能配置一个upstream)选择服务器之后可以设置端口和权重。
  • 第三步设置健康检查,可以对健康检查的参数进行设置,具体是几次失败不健康,几次成功正常,检查间隔时间,健康的返回是什么等等。
  • 第三步配置审核,然后提交。

8.2. ALB

应用型负载均衡ALB(Application Load Balancer):专门面向七层,提供超强的业务处理性能,例如HTTPS卸载能力。单实例每秒查询数QPS(Query Per Second)可达100万次。同时ALB提供基于内容的高级路由特性,例如基于HTTP报头、Cookie和查询字符串进行转发、重定向和重写等,是阿里云官方云原生Ingress网关。更多信息,请参见什么是应用型负载均衡ALB

ALB有如下特点:

  • 应用层高弹性 ALB面向应用层,提供域名与VIP,多级分发承载海量请求。ALB支持通过流量分发扩展应用系统的服务能力,消除单点故障提升应用系统的可用性。ALB允许自定义可用区组合和在可用区间弹性伸缩,避免单可用区资源瓶颈。
  • 先进的协议支持 ALB支持HTTP、HTTPS和QUIC协议,具备超大规模的流量处理能力。在实时音视频、互动直播和游戏等移动互联网应用中,访问速度更快,传输链路更安全可靠。ALB支持gRPC框架,可实现海量微服务间的高效API通信。
  • 基于内容的高级路由 ALB支持基于路径、HTTP标头、查询字符串、HTTP请求方法、Cookie和SourceIp等多种条件来识别特定业务流量,并将其转发至不同的后端服务器。同时ALB还支持重定向、重写以及自定义HTTPS标头等高级操作。
  • 安全可靠 ALB自带DDoS防护,集成Web应用防火墙。同时提供全链路HTTPS加密,支持预制和自定义安全策略、TLS 1.3等高效安全加密协议,面向加密敏感型业务,满足Zero-Trust新一代安全技术架构需求。
  • 面向云原生 随着云原生逐步成熟,互联网、金融、企业等行业新建业务时都会选择云原生部署,或对现有业务进行云原生化改造。ALB与容器服务Kubernetes版、SAE、函数计算和开源K8s等深度集成,是阿里云的官方云原生Ingress网关。
  • 弹性灵活的计费: ALB通过弹性公网IP(Elastic IP Address,简称EIP)和共享带宽提供公网能力,实现公网灵活计费;同时采用了更先进的、更适合弹性业务峰值的性能容量单位LCU(Loadbalancer Capacity Unit)的计价方案。

使用步骤:

  • 第一步配置监听,协议和端口。
  • 第二步选择服务器组,可以直接在这创建服务器组。
  • 第三步配置审核,提交配置。
  • 第四步编辑监听,设置监听规则(域名、路径、HTTP协议头、查询字符串、请求方法、Cookie、SourceIP等)

8.3. NLB

网络型负载均衡NLB(Network Load Balancer):面向万物互联时代推出的新一代四层负载均衡,支持超高性能和自动弹性能力,单实例可以达到1亿并发连接,帮您轻松应对高并发业务。NLB面向海量终端连接、高并发消息服务、音视频传输等业务场景针对性地推出了TCPSSL卸载、新建连接限速、全端口监听等高级特性,在物联网MQTTS加密卸载等场景为用户提供多种辅助手段,是适合IoT业务的新一代负载均衡。

ALB有如下特点:

  • 超强性能: NLB单实例最大支持1亿并发连接和100 Gbps带宽,能够轻松应对面向物联网海量连接的高并发场景。
  • 自动弹性伸缩: 无需指定或手动调整NLB的实例规格,实例性能会随着您的业务增减自动弹性伸缩。
  • 高可用: 采用多层次容灾架构设计,通过集群容灾、会话保持、可用区多活等机制保障实例的可用性。
  • TCPSSL卸载: 支持大规模TCPSSL卸载,您可以在NLB上对SSL证书进行集中管理及卸载,有效提升后端业务处理效率。
  • 多场景流量分发: 支持挂载IP类型后端服务,可以结合云企业网实现跨地域、跨VPC及云下IDC服务器等多个场景的流量分发调度。
  • 丰富的高级特性: 支持IPv4/IPv6双栈、全端口、新建连接限速、连接优雅中断等高级特性,满足您多方位的业务定制需求。

应用场景:

  • 物联网业务入口: 在智能家居、智能停车、视频监控、车联网等业务场景中,NLB作为业务入口可以同时处理海量并发连接,同时提供TCPSSL卸载、连接限速等能力保障物联网业务安全稳定运行。
  • 互联网云上业务入口: NLB作为互联网流量入口,单实例提供超高的四层处理能力,同时可以基于业务变化自动弹性伸缩,业务波动时无需手工干预,降低了运维管理成本。
  • 混合云业务入口: NLB支持挂载本地IDC(Internet Data Center)服务器,可以搭配云企业网等产品将云上请求转发至线下服务器处理,轻松实现线下IDC与云上服务互通。

9. 域名解析

域名 --DNS-->IP

我们需要先去选购自己的域名,域名需要注意一点的是需要到网信办进行备案,不备案访问会弹窗。

配置域名解析,域名对应一个IP,如果我们使用了SLB就是它的公网IP,当然也可以是ECS的公网IP。

还可以设置缓存时间TTL。

www.baidu.com --->ip www主机记录。

@.baidu.com --->ip 短域名 baidu.com 与 www.baidu.com 效果一致。

*.baidu.com --->ip 所有子域名都会解析到同一ip。

www #pc

m/mobile # 移动端

video # 视频

image # 图片

10. 内容分发网络CDN

CDN 内容分发网络 分布式缓存 一般存储静态资源。

常用产品:

  • 云服务厂商(阿里云、腾讯云...)
  • 专门的CDN厂商(蓝汛等)
  • 自建CDN(分区域部署缓存节点+全局调度)

早在CDN没普及之前,使用BGP机房或者BGPP网络实现类似CDN的功能,边界网络协议,它可以使一个IP对应多个线路,现在基本不会用,主要用于自建机房。

下面我们简单看一下CDN的原理。

  1. 当终端用户向www.aliyundoc.com下的指定资源发起请求时,首先向Local DNS(本地DNS)发起请求域名www.aliyundoc.com对应的IP。
  2. Local DNS检查缓存中是否有www.aliyundoc.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向网站授权DNS请求域名www.aliyundoc.com的解析记录。
  3. 当网站授权DNS解析www.aliyundoc.com后,返回域名的CNAME www.aliyundoc.com.example.com
  4. Local DNS向阿里云CDN的DNS调度系统请求域名www.aliyundoc.com.example.com的解析记录,阿里云CDN的DNS调度系统将为其分配最佳节点IP地址。
  5. Local DNS获取阿里云CDN的DNS调度系统返回的最佳节点IP地址。
  6. Local DNS将最佳节点IP地址返回给用户,用户获取到最佳节点IP地址。
  7. 用户向最佳节点IP地址发起对该资源的访问请求。
    • 如果该最佳节点已缓存该资源,则会将请求的资源直接返回给用户(步骤8),此时请求结束。
    • 如果该最佳节点未缓存该资源或者缓存的资源已经失效,则节点将会向源站发起对该资源的请求。获取源站资源后结合用户自定义配置的缓存策略,将资源缓存到CDN节点并返回给用户(步骤8),此时请求结束。

选购CDN的具体步骤如下:

  • 第一步域名信息,选择要加速的域名,对域名进行配置;选择业务信息,具体是对什么进行加速,可以是图片,文件,音视频等等,可以选择加速区域,全国,还是全球,设置资源分组;设置源站信息,可以是OSS、可以是IP,可以是源站域名,可以是函数计算,设置主备,权重,端口等信息。
  • 第二步选择配置,配置缓存过期时间(可以根据规则进行设置),过滤参数。
  • 第三步获取CNAME,对CNAME设置DNS解析。

CDN是可以进行预热和刷新的。

预热:CDN没有缓存,让CDN回源生成缓存。

刷新:CDN上有缓存,更新CDN缓存。

注意事项:使用预热和刷新会导致大量请求回源站,增加源站压力和带宽消耗。

11. 安全

11.1. WAF防火墙

一般防火墙的实现方式:

  • 云产品:WAF防火墙
  • 物理设备:硬件防火墙(深信服)
  • 开源自建:nginx+lua实现

WAF可对网站或者App的业务流量进行恶意特征识别及防护,在对流量清洗和过滤后,将正常、安全的流量返回给服务器,避免网站服务器被恶意入侵导致性能异常等问题,从而保障网站的业务安全和数据安全。

如果使用CDN可以将CDN和WAF配合使用。

针对域名进行接入

云安全中心(态势感知)会发现程序漏洞

12. 迁移工具

物理机上云很简单,云服务厂商会提供迁移工具。

数据传输服务DTS(Data Transmission Service)是阿里云提供的实时数据流服务,支持关系型数据库(RDBMS)、非关系型的数据库(NoSQL)、数据多维分析(OLAP)等数据源间的数据交互,集数据同步、迁移、订阅、集成、加工于一体。

如果大家感觉有帮助,请 点赞、收藏+关注! 有问题也可以在评论区进行讨论哦。