最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

微服务架构如何影响软件开发文化?

  • 2019-08-23
  • 本文字数:1386 字

    阅读完需:约 5 分钟

微服务架构如何影响软件开发文化?

微服务,并不仅仅是一种代码构造方式。



微服务概念一出现就引发了热烈讨论,很多文章都喜欢将其与整体式架构比较,乃至来自大型企业的用例等。然而,在说起微服务时,开发人员关注的往往是这场革命的技术意义,而非其象征的文化颠覆。虽然技术元素也很重要,但其中蕴含的文化变革更加值得重视。


我很幸运能够在 2014 年左右快速融入这场潮流,我也清楚地记得当时能够将陈旧的整体式应用迁移至新的、酷炫无比的微服务架构是多么令人兴奋。和很多朋友一样,我刚开始也只关注技术方面的影响——毕竟,当时正是革命性技术快速涌现的时期(例如,Docker 那时刚刚出现)。


然而,经过几年发展,尽管在技术层面发生了诸多变化,但我认为微服务对组织中软件开发方式产生的最大影响主要体现在代码归属权以及团队的职能定位上。

功能团队

虽然我们也可以在整体式架构下建立具有跨职能特性的团队,但组织通常会根据具体技术功能(例如前端、后端、系统管理员以及数据库开发等)进行团队拆分。因此,开发人员很少能够接触到生产环境,因此几乎不需要考虑生产与维护方面的问题。James Lewis 与 Martin Fowler 在最初定义微服务架构概念的文章中就强调过这一点。


微服务支持者倾向于消除这种固有模式,而更多将团队视为产品在整个生命周期当中的归属方。在这方面,比较典型的例子就是亚马逊提出的“谁构建、谁运行”原则,要求开发团队对生产环境中的软件负全部责任。


除此之外,将具有其他专业知识的人员引入团队(例如产品/营销),也使团队获得远超技术范畴的其他能力。团队将能够监控客户反馈、用户采用与商业价值,使团队对功能以及其中的各个层面负起完全责任。通过这样的新模式,团队将能够明确观察到他们的决策对于产品以及业务本身造成的影响。

代码所有权

在刚开始编程时,我曾投入数年时间研究游戏、桌面/Web 应用程序以及网站等小型项目,把头脑中的想法转化为代码,给人一种莫名的愉悦感。然而,在开始从事软件开发职业之后,我发现真正的工作更像是流水线上的装配操作,而非艺术创作。


除了责任模糊外,在选择技术时,代码库与数据存储的集中特性同样有很多局限。关于框架、语言、设计模式以及数据库引擎选择方面的决策必须符合全局要求。简而言之,如果无法对所有要素进行整体把控,就很难获得理想的创造能力。


微服务架构还带来了小代码库概念。将原本的单一大存储库分散为几十个较小的存储库,能够确保特定存储库拥有明确的归属划分。很明显,代码所有权并不一定意味着必须由单个团队或者个人负责代码的整体维护。其他团队也可以根据需要提交 pull 请求(内部源)。但是,代码的所有者应当负责保障解决方案质量,并确保所有 pull 请求都符合代码标准以及 API 合约的要求。

总结

就我个人看来,拥有明确归属权的小型团队能够在日常开发工作中享受更多乐趣,并为开发人员提供足以激发创造力的自由空间。此外,使用小代码库会给人再次参与小型项目的感受,这能够在大型组织之内建立起初创精神。


请别误会,微服务也不是什么百试百灵的“银弹”。虽然面向微服务的架构有助于建立代码归属权与功能团队,但对场景也有着相当具体的要求。毕竟,这些功能在整体式代码库中也完全能够实现,只是需要辅以更多的组织参与投入。总结来讲,这场文化变革应有怎样的面貌、又是否适合,还得请各位开发人员自行判断。


原文链接:


How Microservices Architecture Impacted the Culture of Software Development


2019-08-23 11:3015212

评论

发布
暂无评论
发现更多内容

Android中自定义ViewGroup

android 程序员 移动开发

Android低版本上APP首次启动时间减少80%(一)

android 程序员 移动开发

Android使用ViewPager实现图片轮播系列之四:手动滑动 + 左右箭头 + 删除数据

android 程序员 移动开发

Android-音视频学习系列-(三)-Shell-脚本入门

android 程序员 移动开发

Android-音视频学习系列-(十)基于-FFmpeg-+-OpenSLES-实现音频万能播放器

android 程序员 移动开发

android下拉刷新——swipeRefresh的使用

android 程序员 移动开发

Android企业级实战-界面篇-2

android 程序员 移动开发

Android-ContentProvider实例详解(1)

android 程序员 移动开发

Android-技术的下半场

android 程序员 移动开发

android下赚钱的几个方式

android 程序员 移动开发

Android-Handler机制详解

android 程序员 移动开发

Android-kotlin的继承

android 程序员 移动开发

Android-Volley完全解析(一),初识Volley的基本用法!

android 程序员 移动开发

AndroidAPP启动速度优化;冷启动和热启动解析

android 程序员 移动开发

Android与单片机---开发板---智能硬件---智能设备---数据协议--开发总结

android 程序员 移动开发

Android中自定义下拉样式Spinner

android 程序员 移动开发

Android体系化进阶学习图谱:我们究竟还要学习哪些Android知识?(某大厂内部资料

android 程序员 移动开发

Android事件分发机制三:事件分发工作流程

android 程序员 移动开发

Android修炼系列(十二),自定义一个超顺滑的回弹RecyclerView

android 程序员 移动开发

Android-R-中的heap新分配器——Scudo

android 程序员 移动开发

Android-高级-UI-进阶之路-(五)-看完该篇文章-Canvas-你应该会了

android 程序员 移动开发

Android中关于Context的三言两语,源码强势分析带你了解Context!

android 程序员 移动开发

Android-举一反三:12个View绘制流程高频面试题,带你全面理解View的绘制流程

android 程序员 移动开发

android之Fragment(官网资料翻译)

android 程序员 移动开发

加速SaaS规模化演进,餐道基于K8s的云上创新底座

阿里巴巴云原生

阿里云 Kubernetes 云原生 SaaS 智慧餐饮

Android-多渠道打包配置;你了解吗?

android 程序员 移动开发

Android-系统预设-App,有什么难的?

android 程序员 移动开发

Android-自定义图像资源的使用(2)

android 程序员 移动开发

Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器

android 程序员 移动开发

Android仿QQ锁屏状态下消息提醒(震动+提示音)

android 程序员 移动开发

基于 Istio 的全链路灰度方案探索和实践

阿里巴巴云原生

阿里云 云原生 istio 灰度 全链路

微服务架构如何影响软件开发文化?_文化 & 方法_Albert Kozłowski_InfoQ精选文章