@levinzhang
2020-01-17T21:22:26.000000Z
字数 2201
阅读 508
技术在随着时间的推移不断演化,近年来我们发现现代的技术和方法论正在替换传统的实践。本文分析了现阶段技术选型中非常重要的一些方面,包括云供应商独立、开源和开放API等。
本文最初发表于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平台将产品特性商品化,从而提升产品的知名度和使用率。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用起来不方便,那么提供它是没有太大意义的。