本文最初发表于Medium网站,由 InfoQ 中文站翻译分享。
技术在随着时间的推移不断演化,近年来我们发现现代的技术和方法论正在替换传统的实践。基于微服务的架构已经成为最流行的实践之一,并且能够帮助组织满足其现代化的需求;云计算的采用在迅速增长,并帮助企业实现了其技术领域的现代化,开源软件正在取代私有的软件,并且越来越成为主流的做法。
现代技术也带来了新的挑战和机会,这些机会能够帮助企业变得更加重要并加速其未来的增长。
云供应商独立
现代解决方案都会部署在云上,以实现高可用性和容错能力,企业通常会选择一个云供应商并利用其平台实现大多数的需求。比如选择使用 AWS 服务(如 EC2、API Gateway、S3、DynamoDB、Elastic File System 等)的公司就能感受到单一供应商带来的简便和高效。也就是说,公司意识到构建与云供应商无关的应用程序是非常必要的,这样在需要的时候能够迁移至其他的云供应商或自己的数据中心。容器化是实现云供应商独立的重要步骤,容器化的应用会部署在 Docker 容器或类似的技术之上,并将应用程序与其环境和依赖打包在一起。
现在,我们看一下容器化解决方案的优势.
能够从某家云供应商无缝迁移至另一家,基本上来讲,可以在任何地方运行你的代码。
开发人员能够不受底层基础设施变化的影响,可以专注于应用程序的功能,不管应用程序运行在什么地方,容器的操作始终是一致的。
部署和回滚只是部署/取消部署镜像而已。
像 Kubernetes 这样的编排软件能够负责容器的管理,Kubernetes 支持跨公有云、私有云和混合云进行编排。
另外一项重要的技术就是采用技术设施即代码(Infrastructure as a Code)的方式提供和管理任意的云、基础设施和服务。Terraform 是这个领域最好的工具。
Terraform 允许我们在一个简单的配置文件中定义基础设施并且可以从公共的库中导入模板。
Terraform 能够自动提供资源,减少人为的错误。
Terraform 以一致的方式支持多个云供应商。
为整个部署过程提供安全性和治理能力。
对云计算的采用在迅速增长,但是设计独立于特定平台的应用程序依然有很长的路要走!
开源你的平台(引擎)
近些年来,我们见证了很多伟大的开源技术,如 Kubernetes、Redis、OpenStack、MongoDB 等等。它们不仅是健壮和可伸缩的,而且可以由开发者社区不断进行改善。现在,组织比以往更加愿意开源他们的平台,他们意识到了全球化的开发者社区所带来的收益。
如今,开源为什么这么有价值呢?
它提升了平台的质量!这是开源社区最重要的一个收益之一,也是开源所带来的积极作用。开源会吸引全球范围内的卓越工程师,他们对产品的贡献是无价的。这可以减少 bug,也可以带来伟大的理念以增强产品。根据Stack Overflow 2019 年的调查,大约 65%的专业开发者每年为开源项目贡献一次或更多次。
开源有助于引领产品的方向,它吸引着全球的开发者,对于组织来讲,这提供了一个巨大的机会,帮助他们引领平台的方向并且影响开发者的战略方向。
提升公司的品牌,发布受社区喜爱的平台将会增强公司的声誉并且鼓励越来越多的人采用该公司的生态系统。一个很好的例子就是Netflix的开源项目,如 Hystrix、eureka, Zuul、Falcor 等。
我知道,对于任何组织来讲,开源其整个平台都是不现实的,但是提供软件的某个组件/引擎是很好的开始。这有助于获得社区的认可并引发开发人员的兴趣。
API 市场和 API 即服务
API 市场能够让公司将其 API 实现货币化并且为开发者管理 API 连接。它会通过统一的 API 平台将产品特性商品化,从而提升产品的知名度和使用率。RapidAPI 是一个值得参考的好案例,它为开发人员提供了一个统一的 API 层,借助它,可以在一个地方管理所有的 API 连接。
意识到 API 市场的收益之后,有些公司已经开始提供 API 即服务(API as a Service),这业已成为一项重要的收入来源。Twilio 和 SendGrid 是很典型的案例,它们可以在控制平台使用的同时提高平台的使用率。这是在控制平台使用的同时增加平台采用率的一个好办法。
亚马逊也参与了进来,所有的用户都可以访问 AWS Personalize API。这是一个机器学习服务,开发人员可以更容易地为其应用程序的用户提供个性化推荐功能。AWS 业已被广泛应用,但是提供这些 API 将会进一步增强 AWS 的生态系统,并鼓励应用程序的开发人员使用这些特性。
尽管很多公司正在通过提供 API 让开发人员使用其产品的特性,但是采用与否取决于 API 使用和理解的难易度,可用性是关键。通常,开发人员会寻找入门指南、如何起步、认证/注册教程、分页、NFR 定义、错误处理等信息。
在为客户发布 API 的时候,我们需要考虑如下的因素。
API 是否易于理解。
API 如何定义实体之间的关联关系。
API 返回数据的相关性。
API 的一致性和可靠性。
API 如何防止出现错误并提供有意义的状态。
建立一个可伸缩的、健壮的、符合标准的 API 是至关重要的,但是如果 API 用起来不方便,那么提供它是没有太大意义的。
评论