从零开始搭建创业公司技术架构
创业公司由于时间、人员、资金等各方面的限制,系统需要的各个组件优先选择第三方服务,而不是自己搭建。一个创业开发项目都需要服务器操作系统、开发语言、web服务器、开发框架、数据库、缓存、静态文件存储、日志系统、业务监控、持续集成、代码管理、发布部署系统、文档管理等。现在按这些方面展开来讲。
服务器操作系统
服务器可以使用云服务器,像阿里云的ECS。对于面向国外的应用,则优选选择 Amazon ECS。 所有的服务器都选择一种操作系统版本,一般都选择 Linux 内核的操作系统,像 Ubuntu、CentOS。Ubuntu的软件源比CentOS的软件源更新些,一般情况下选择Ubuntu。服务器硬件使用大致相同的配置,后面根据配置扩展。
开发语言
对与创业公司来说,时间是很重要的,所以我们要选择团队容易上手的开发语言便于快速迭代。一般来说,php和go语言都是不错的选择。
数据库
对于关系性数据库,首选mysql,可以选择阿里云的 RDS 提供mysql服务,减轻DB管理工作。
开发框架
对于开发框架的选型,我们需要考虑:
- 框架是否完善,支持分布式、包含常用的像日志、缓存等组件,性能优越
- 团队成员需要有非常熟悉该该框架的同事,需要能掌控框架
- 框架使用广泛,有活跃的社区支持
对于php我们可以选择laravel/tp/yii这样的开发框架,注意需要各个项目都统一使用一种框架,便于同事专注于业务开发,掌握业务中需要用到的技术。
web服务器软件
web服务器软件有nginx、apache、tomcat、iis等。现在nginx广泛使用,nginx可做后端服务器的反向代理、负载均衡、静态图片缓存,以及可使用lua扩展nginx。
LB(负载均衡)
LB(负载均衡)是一个通用服务,一般云厂商的 LB 服务基本都会如下功能:
支持四层协议请求(包括 TCP、UDP 协议); 支持七层协议请求(包括 HTTP、HTTPS 协议); 集中化的证书管理系统支持 HTTPS 协议; 健康检查; 如果你线上的服务机器都是用的云服务,并且是在同一个云服务商的话,可以直接使用云服务商提供的 LB 服务,如阿里云的 SLB,腾讯云的 CLB, 亚马逊 的 ELB 等等。如果是自建机房基本都是 LVS Nginx。
缓存
对于热点数据需要使用缓存,减轻服务器的压力。现在 Redis 等内存缓存广泛使用,可以选择像阿里云的数据库 Redis版。
静态文件存储
静态文件像图片、视频等文件比较耗磁盘资源,并且耗带宽,需要有磁盘更大、带宽更便宜服务器做这件事。可以自己搭建fastdfs集群做这件事,但比较麻烦。现在很多公司都选择像阿里云OSS、又拍云、七牛云这样的服务。如果使用阿里云的OSS的话,搭配阿里云的ECS、CDN就比较方便。
CDN
使用CDN分发内容,使用户访问比源节点,提高用户访问速度。对于有很多小的静态文件、html文件、视频文件、图片文件的应用效果非常好。CDN可以选择阿里云和腾讯云。
日志系统
日志对于排除应用故障非常有帮助,简单的应用通过打印文件就可以。然后通过ELK组件做收集存储展示。在php中可以使用Seaslog输出规定格式的日志,然后再用ELK。
业务监控
我们平常做的简单的监控是,在系统异常或者错误时,通过企业微信或者钉钉这样的方式发送信息给组成员。这中方式做的事情比较有限,而且不够智能。可以选 new relic 这样的apm监控工具监控页面响应时间等。系统监控看阿里云后台。
短信服务
短信服务时应用中经常用到的,短信服务商包括有容联云通讯、阿里云等,发送量很大时,可以选择几家服务商交替使用。
代码管理
代码管理工具使用gitlab搭建代码管理工具,或者使用github私有库。
持续集成
持续集成,简称CI,是一种软件开发实践。通过持续集成工具,每次提交代码自动完成安装程序依赖、自动化测试等,测试验证开发效果比较方便。如果使用gitlab,可以使用GitLabCI,或者使用Jenkins。
发布部署系统
从测试环境,到预发环境,到最终的正式环境部署,需要有响应的部署系统的支持,发布系统可以考虑使用wallet这样的开源系统,wallet网址:http://www.walle-web.io/docs/
跳板机
开发需要可能登录到多台服务器环境,可以使用跳板机来方便登录,此外来可以做安全审计,查看每个成员的操作,将责任划分到人,提高系统安全性。跳板机可以使用jumpserver。
文档管理
对于创业公司,文档管理很重要。必要的文档,可以让新成员更快地融入到项目,也有利于团队的技术沉淀。对于内部文档管理,可以使用开源的markdown系统,如showdoc。文件附件可以存放到企业微信的文件里。也可以使用第三方的系统,如腾讯tapd,兼具需求管理、文档管理等功能。
需求管理
可以使用腾讯的tapd比较完整的工具,或者使用trello简单的需求管理工具。所有口头需求都要写到需求管理工具上面,防止忘记以及方便查看需求。每天开发成员将当日计划开发的新需求添加到共享excel里,将之前的任务用不同颜色标注为完成和进行中。早会时,简要说下今日工作内容和遇到的问题。
项目管理
- 有专人对接项目需求,让程序员有更多的时间写代码。
- 手机24小时开机,快速响应突发问题
- 团队leader要以身作则,成员较少时,甚至要亲身写代码。
- 团队leader要放手开发成员做事,让所有成员都有提升,这样也可以减少成员流失。
- 处理服务器问题时,最好不要让 BOSS 在开发身边,增加压力
- 项目架构预留扩展,但是不要过于设计架构。架构简单,更易于维护。
- 项目重构要放在平常工作,逐步去做。不要轻易推翻之前设计,这样很费时间。
参考
[从零开始搭建创业公司后台技术栈]http://www.phppan.com/2018/04/svr-stack/ [从零开始,打造适合创业公司的千万级用户技术架构] http://www.upyun.com/opentalk/244.html [小恩爱技术团队成长及服务器架构演变] http://www.upyun.com/opentalk/245.html [浅谈创业早期技术实现] https://mp.weixin.qq.com/s/OyuYpQfCy0XuGat-YC9iBg