对于一些中小型互联网公司来说,我们通常使用云厂商为我们提供的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支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,并且提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,帮助我们解决数据库运维的烦恼。
在选购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对进入流量的处理如下所示:
- TCP/UDP协议和HTTP/HTTPS协议的流量都需要经过四层集群进行转发。
- 四层集群内的每一台节点服务器均匀地分配海量访问请求,并且每一台节点服务器之间都有会话同步策略,以保证高可用。
-
- 如果相应的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的原理。
- 当终端用户向
www.aliyundoc.com
下的指定资源发起请求时,首先向Local DNS(本地DNS)发起请求域名www.aliyundoc.com
对应的IP。 - Local DNS检查缓存中是否有
www.aliyundoc.com
的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向网站授权DNS请求域名www.aliyundoc.com
的解析记录。 - 当网站授权DNS解析
www.aliyundoc.com
后,返回域名的CNAMEwww.aliyundoc.com.example.com
。 - Local DNS向阿里云CDN的DNS调度系统请求域名
www.aliyundoc.com.example.com
的解析记录,阿里云CDN的DNS调度系统将为其分配最佳节点IP地址。 - Local DNS获取阿里云CDN的DNS调度系统返回的最佳节点IP地址。
- Local DNS将最佳节点IP地址返回给用户,用户获取到最佳节点IP地址。
- 用户向最佳节点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)等数据源间的数据交互,集数据同步、迁移、订阅、集成、加工于一体。
如果大家感觉有帮助,请 点赞、收藏+关注! 有问题也可以在评论区进行讨论哦。