技术选型内容

技术选型从组成要素的角度分为两大类:

  1. 实现业务的代码
  2. 业务依赖的服务

本文围绕代码这一核心进行技术选型,对此分解以下五个问题:

  1. 怎么管理代码?
  2. 用什么语言写代码?
  3. 怎么运行代码?
  4. 在哪里运行代码?
  5. 怎么大规模运维代码?

技术选型原则

先看一下技术选型应该考虑些什么呢?

  1. 业务的特点与需求
  2. 资源和经验
  3. 可扩展性
  4. 可维护性
  5. 安全
  6. 成本(投入时间,人力,资源。。。)

简单总结为以下几点:

  1. 稳定优先,善用为上
  2. 立足现状,着眼未来
  3. 验证先行,应用在后
  4. 业务导向,实践驱动

下面就根据这些原则一一回答上面五个问题,但是不会涉及具体的问题如消息队列是选RabbitMQ还是Kafka。

代码管理

对应上面的怎么管理代码的问题。首先是工具,现在大家都清一色的git。在git没有出来之前有以下这些工具:

  1. clearcase
  2. svn
  3. TortoiseCVS

再次就是选择平台。有以下选项

  1. github
  2. gitlab
  3. gitee
  4. gitbucket
  5. 自建gitlab

选择自建gitlab。主要考虑如下:

  1. 历史原因
  2. Gitlab自带CI
  3. 代码安全考虑
  4. 自建gitlab带来的自主控制,有利于后续的发展

编程语言

以Golang为主,其他语言为辅助。

Why Golang

  1. 个人及其团队主要成员都有Golang经验
  2. Golang在区块链项目中会占主导地位
  3. 更多理由见:Golang最工程化的语言

运行环境

运行环境分为以下几种:

  1. 物理主机
  2. 虚拟机
  3. Docker

除了一些特殊的场景,现在流行的作法当然是Docker。

Why Docker

Docker是容器的事实上标准。 使用Docker带来新部署方式:build->ship->run,有以下好处:

  1. 可移植性:容器与操作系统分离,基本上保证可以在不同的机器及环境的主机上运行,容器也可以在不同机器上迁移
  2. 模块化:利用容器隔离属性可以划分模块,合理拆分服务,同时容器化的一致性便于模块的复用
  3. 安全性:容器隔离属性增加了应用程序的安全性
  4. 弹性伸缩:容器化方便在负载增加扩容,在负载下降时缩容,有利于提高资源利用效率
  5. 一致性:容器为应用程序提供了一致性的运行环境。

运行平台

上云现在已经成为大众共识。AWS,azure, google cloud, aliyun及腾讯云都是选项内容。

大规模运维

容器化带来以上不少好处,但是也带来容器编排的问题。容器编排哪家强?Github找Kubernetes啊。

对于小企业采用Kubernetes将高可用性完全交给云平台,自身解决正确科学应用Kubernetes问题,当然这个慢慢来,先调研,再实验。大企业需要深入Kubernetes细节与生态,要有修改与定制的能力。

why Kubernetes

首先Kubernetes成为实际上容器编排的标准。其次使用Kubernetes带来分工的变化:应用开发工程师可以专注于构建应用程序,而基础架构工程师可以专注于如何自动构建和部署,从而提高了工程效率,更快地交付了应用程序并简化了基础架构。除此之外Kubernetes提供了工具提高应用程序的高可用性,同时也可以灵活的切换云服务商。

(end)

欢迎关注

欢迎关注微信公众帐号:沉风网事(savewind)

沉风网事