关于技术选型的思考
文章目录
技术选型内容
技术选型从组成要素的角度分为两大类:
- 实现业务的代码
- 业务依赖的服务
本文围绕代码这一核心进行技术选型,对此分解以下五个问题:
- 怎么管理代码?
- 用什么语言写代码?
- 怎么运行代码?
- 在哪里运行代码?
- 怎么大规模运维代码?
技术选型原则
先看一下技术选型应该考虑些什么呢?
- 业务的特点与需求
- 资源和经验
- 可扩展性
- 可维护性
- 安全
- 成本(投入时间,人力,资源。。。)
简单总结为以下几点:
- 稳定优先,善用为上
- 立足现状,着眼未来
- 验证先行,应用在后
- 业务导向,实践驱动
下面就根据这些原则一一回答上面五个问题,但是不会涉及具体的问题如消息队列是选RabbitMQ还是Kafka。
代码管理
对应上面的怎么管理代码的问题。首先是工具,现在大家都清一色的git。在git没有出来之前有以下这些工具:
- clearcase
- svn
- TortoiseCVS
再次就是选择平台。有以下选项
- github
- gitlab
- gitee
- gitbucket
- 自建gitlab
选择自建gitlab。主要考虑如下:
- 历史原因
- Gitlab自带CI
- 代码安全考虑
- 自建gitlab带来的自主控制,有利于后续的发展
编程语言
以Golang为主,其他语言为辅助。
Why Golang
- 个人及其团队主要成员都有Golang经验
- Golang在区块链项目中会占主导地位
- 更多理由见:Golang最工程化的语言
运行环境
运行环境分为以下几种:
- 物理主机
- 虚拟机
- Docker
除了一些特殊的场景,现在流行的作法当然是Docker。
Why Docker
Docker是容器的事实上标准。 使用Docker带来新部署方式:build->ship->run,有以下好处:
- 可移植性:容器与操作系统分离,基本上保证可以在不同的机器及环境的主机上运行,容器也可以在不同机器上迁移
- 模块化:利用容器隔离属性可以划分模块,合理拆分服务,同时容器化的一致性便于模块的复用
- 安全性:容器隔离属性增加了应用程序的安全性
- 弹性伸缩:容器化方便在负载增加扩容,在负载下降时缩容,有利于提高资源利用效率
- 一致性:容器为应用程序提供了一致性的运行环境。
运行平台
上云现在已经成为大众共识。AWS,azure, google cloud, aliyun及腾讯云都是选项内容。
大规模运维
容器化带来以上不少好处,但是也带来容器编排的问题。容器编排哪家强?Github找Kubernetes啊。
对于小企业采用Kubernetes将高可用性完全交给云平台,自身解决正确科学应用Kubernetes问题,当然这个慢慢来,先调研,再实验。大企业需要深入Kubernetes细节与生态,要有修改与定制的能力。
why Kubernetes
首先Kubernetes成为实际上容器编排的标准。其次使用Kubernetes带来分工的变化:应用开发工程师可以专注于构建应用程序,而基础架构工程师可以专注于如何自动构建和部署,从而提高了工程效率,更快地交付了应用程序并简化了基础架构。除此之外Kubernetes提供了工具提高应用程序的高可用性,同时也可以灵活的切换云服务商。
(end)
欢迎关注
欢迎关注微信公众帐号:沉风网事(savewind)
文章作者 沉风网事
上次更新 2018-09-05