基于阿里云搭建的适合初创企业的轻量级架构--架构总结

本文涉及的产品
云服务器 ECS,u1 4核16GB 1个月
云服务器 ECS,u1 4核8GB 1个月
云服务器 ECS,每月免费额度200元 3个月
简介: 在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变、快速部署、持续集成并可以适应多种情况的架构便显得尤为重要。本文主要介绍基于阿里云搭建适合项目初期的后端架构

----基于阿里云搭建的适合初创企业的轻量级架构

前言

在项目的初期往往存在很多变数,业务逻辑时刻在变,而且还要保证快速及时,所以,一个灵活多变、快速部署、持续集成并可以适应多种情况的架构便显得尤为重要。本文主要介绍基于阿里云搭建适合项目初期的后端架构,至于细节操作不作描述,比如nginx配置优化、linux内核优化、防火墙配置、ansible的使用等。


项目背景

项目的组成: 两个IOS客户端,一个微信端,一个管理系统,智能硬件。


项目初期的运维架构

总体架构

项目后端架构使用阿里云服务搭建,其中RDS为主从集群,并配备灾备实例。ECS可根据业务量动态弹性伸缩,其余服务均采用单实例的方式远程调用。

海伦钢琴项目后端架构简图.png


VPC

搭建VPC的原因有以下几点:

  1. 可以将业务数据库和业务服务器放置在可以自己掌握的同一内网,可以提高一些安全性。
  2. 内网访问,稳定而且速度快。
  3. 阿里云服务之间通过内网访问的流量是不收费的。所以在选购服务时,带宽可以选择流量版,这样在保证带宽速率的同时,还可以极大的减少运维费用。
    举个例子:同样一台ECS,在同为百兆带宽的情况下,每月的费用如下图:

按固定带宽

按使用流量

当然,能这样的做的原因也是因为在这个架构中,ECS仅处理业务逻辑,几乎不存储文件资源。大部分静态资源,如视频图片等,都是存储在OSS上。如果存放静态资源,比如下视频或图片什么的,流量一多那就很亏了。


业务数据层

  • RDS

项目一开始,RDS选购的是共享型单实例的,随着业务量的提升,可以多区域部署只读实例。另外,保险起见,主实例可以配有一个灾备实例,防止意外发生。

  • Redis

阿里云的这个Redis,一开始我用的时候比较早,那个时候还不支持主从的,只能单实例,所以主要用它做数据缓存,响应速度非常快。而且,因为是放置在内网的且只能内网访问,所以安全性也很高。

目前阿里云redis已经可以支持主从集群,使用它实现一些业务场景也是个很不错的选择。比如有序集合可以用来做数据权重分析后的数据排序,哈希表可以用来存储具有简单映射关系的字典表,还有消息队列,消息订阅等等其它场景都可以使用redis实现,并进行持久化存储。

  • MongoDB

结构型数据,主要存储档案式的数据,比如每个用户的操作行为,以档案式记录并进行统计分析,方便下一阶段的项目做个性化服务。另外一些关联复杂的数据,也可以用MongoDb存储,可以提高访问速度。还有,一些对软件应用版本比较敏感的数据也可以存在MongoDB中,比如a版本拿到A数据,b版本拿到B数据,而这个AB数据都是由很多关联关系复杂的数据所组成,如果把这些数据根据版本号存储在不同的MongoDB档案中,需要时,直接根据版本号拿就可以了,这样就避免了很多的mysql查询。


静态资源

  • OSS + CDN
    OSS存储静态资源,CDN(内容分发网络)可以加速静态资源的下载速度。至于资源链接地址,客户端可以通过接口访问从后端业务数据库中拿到。

服务器安全

  • 运维层面
  1. 选购了阿里云的web防火墙和态势感知的服务。这两个服务可以实时监控服务器状态,识别并跟踪攻击来源和类型,可以说,用这两个工具也节省了很多人力成本。
  2. 配置firewalld。
  • 业务层面
    针对接口访问的安全性,主要做了以下工作
 1. 签名验证:防止伪造请求
 2. 访问频次限制:计数器是用phpredis制作的毫秒级计数器
 3. https访问
 4. 部分敏感数据,使用RSA非对称加密

服务器集群

  • 主ECS

通过这台ECS,可以管理其它从属的ECS,并查看状态。安装的主要工具为ansible。
如果不需要用这台ECS来做负载均衡的话,可以配置白名单连接,只允许管理员ip才能访问。

  • 从属ECS

这类ECS服务器只存放逻辑代码,所以当需求量增加时,只需增加此类服务器的个数即可。而且,在增加个数时,可以使用之前制作好的镜像,创建多台相同环境的ECS服务器。每台ECS的web环境为nginx1.10和php7,微服务容器环境用的docker。

  • 负载均衡

负载均衡可以采用两种方式

  1.购买阿里云的负载均衡实例(注意要买带公网ip的)。
      由该负载均衡实例接收请求后,会分发到内部服务器。
  2.在某台具有外网ip的ECS上使用nginx部署负载均衡服务。
  
  个人更倾向第一种,毕竟管理起来比较方便,节省人力。

使用到的第三方服务

  • Coding
 后端的所有代码都是放在Coding上的,喜欢Coding的原因有三个。
 1.私有git仓库当时没有个数限制,虽然现在有限制了,但是费用不贵。
 2.有ios客户端且比较好用。
 3.操作界面好看。

后端代码的自动部署是通过Coding的webhook实现的,具体操作可以去看这篇博客《利用Coding的webhook自动部署项目》。使用其它代码托管平台也有基于git的webhook功能,操作方式大致相同。

实现的场景:代码的自动部署与持续集成。
当我提交代码到开发分支上时,测试服务器上会自动更新开发分支上的代码。
当我把开发代码合并到主分支上时,正式服务器会自动拉取master分支上的代码,可谓是方便快捷。
jenkins 之类的工具虽然也尝试过,但是感觉部署起来很不方便,不够定制化,而且还消耗了一部分服务器资源。
  • 容联·云通讯
    主要用来实现短信通知、验证码等功能
  • 融云IM
    主要用来实现ios客户端之间的即时通讯以及客户端的应用消息推送。

后端逻辑层架构

项目起初的接口是基于phalapi框架开发,之后逐步过渡到基于laravel5.3开发,感觉还是不够灵活,与项目属性有些不符,后来又转到thinkphp5框架,但在使用中发现了一些问题,虽然提交了pr,但是响应速度无法达到公司项目的迭代速度,于是就重写的框架核心,并开发了一个支持多应用后端场景的后端开源项目。框架核心保留大部分thinkphp5优秀特性的同时,又加入一些thinkphp5本身没有的元素,且修改了很多代码问题。

github: https://github.com/AxiosCros/tpr-cms

 项目主要集成了以下服务
 workman : 实现长连接场景
 gearman : 实现异步处理,及CGI到CLI模式切换
 rabbitMq :实现消息队列场景,解耦生产者与消费者

 还有其它服务的SDK重制版,如aliyun-sdk,Umeng、RongIM等
 以及一些项目中常用的工具

如何根据业务量提高性能

  • http请求的并发性能可以通过增加ECS实现,针对部分耗时较长且无须即时回调的请求,可以用gearman异步处理。
  • 数据库的并发连接数可以通过增加配置来提高,也可以通过创建只读实例进行读写分离,提高数据处理能力。再往后,可能需要搭建hadoop管理数据库集群,不过等用上hadoop的时候,应该已经不是项目初期了,至少数据量得是TB级的了。
  • 其它还可以采用优化nginx配置,优化linux内核,采用高速固态硬盘等等的手段。

总结评价

这套架构基本上可以完全满足项目初期的业务需要,而且所有的云服务费用总和也非常少(相比于自建服务器机房)。随着业务量的提升,可以逐步升级配置或者平行扩展以应对需求,可以在短时间内临时性的提高并发处理能力。总结起来就是省钱、省时、省力气。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
存储 关系型数据库 数据库
给阿里云的建议和意见 一个云服务器架构是否可行
摘要(Markdown格式): 在修复阿里云服务器IPv4设置错误时遇到困难,导致服务器远程登录失败及外网访问受阻,耗时三天解决。建议阿里云更新文档,确保设置指导与实际情况一致,例如只需在路由表添加条目关联IPv4。此外,建议优化帮助页面,如采用折叠式设计减少干扰。服务器主要任务是数据分析、存储和分发,文中提出简化服务器框架,消除硬件软件复杂配置,利于初学者和独立开发者快速上手,降低时间成本。该设计旨在减少无用组件,节省资源,同时降低云服务商的人力和支持成本。期望云服务商考虑此类架构创新。目前未知是否有类似产品,期待业界反馈。
885 0
给阿里云的建议和意见 一个云服务器架构是否可行
|
12天前
|
消息中间件 API 数据库
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
在微服务架构中,每个服务通常都是一个独立运行、独立部署、独立扩展的组件,它们之间通过轻量级的通信机制(如HTTP/RESTful API、gRPC等)进行通信。
|
14天前
|
自然语言处理 监控 搜索推荐
阿里云百炼知识检索应用评测:搭建个人/企业专属智能问答助手
阿里云百炼知识检索应用评测:搭建个人/企业专属智能问答助手
|
24天前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
240 2
|
24天前
|
弹性计算 运维 Kubernetes
阿里云ECS与混合云策略的结合,不仅为企业搭建了一个既灵活又稳定的IT基础架构,还为业务的快速发展与创新提供了坚实的技术支撑。
【7月更文挑战第3天】阿里云ECS在混合云中扮演关键角色,提供弹性计算资源和多样计费模式,确保业务连续性与灵活性。通过VPC互通、应用迁移、数据同步服务,如VPC对等连接、DTS,实现云上云下资源的高效整合。结合安全解决方案,保证在混合环境下的合规与安全。阿里云ECS助力企业数字化转型,应对市场变化。
58 1
|
29天前
|
运维 Kubernetes Devops
阿里云云效操作报错合集之Message: code: 403, 当前代码组下无法创建可见性为企业可见的代码库,该如何处理
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
29天前
|
SQL 存储 运维
网易游戏如何基于阿里云瑶池数据库 SelectDB 内核 Apache Doris 构建全新湖仓一体架构
随着网易游戏品类及产品的快速发展,游戏数据分析场景面临着越来越多的挑战,为了保证系统性能和 SLA,要求引入新的组件来解决特定业务场景问题。为此,网易游戏引入 Apache Doris 构建了全新的湖仓一体架构。经过不断地扩张,目前已发展至十余集群、为内部上百个项目提供了稳定可靠的数据服务、日均查询量数百万次,整体查询性能得到 10-20 倍提升。
网易游戏如何基于阿里云瑶池数据库 SelectDB 内核 Apache Doris 构建全新湖仓一体架构
|
9天前
|
敏捷开发 Java Devops
阿里云云效产品使用合集之将代理仓库关闭,之前通过代理同步的jar包会继续存在于企业仓库中吗
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
9天前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之需要在某个企业或团队的云效实例中进行协作,该如何操作
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
12天前
|
数据采集 人工智能 监控
客户管理和运营太难了?瓴羊×阿里云上的Salesforce给出更符合中国企业体质的解法
客户管理和运营太难了?瓴羊×阿里云上的Salesforce给出更符合中国企业体质的解法

热门文章

最新文章