微服务架构师的职责——《微服务设计读书笔记》

如何定义架构师

        架构师从英文单词Architect翻译而来,在英文中,Architect原来的意思是“建筑师”。作者吐槽英文中架构师与传统的建筑师单词相同,但实际的工作性质并不相同,以致于在英文的语境中会造成理解上的差异。

      传统的建筑师在设计建筑时要求极端地精确,在正式施工之前会进行完整的论证、设计、计划等,不允许出现任何差错;而软件架构师则地面对的问题更加不可测,软件在使用的过程中会面临大量的需求变更,甚至在发布至正式环境后仍然不断演化。

      因此软件架构师必须要改变那种一开始就要设计出完美产品的想法,相反,我们应该设计出一个合理的框架,在这个框架中慢慢地演化出正确的系统。这就像城市规划师一样,他的职责是优化城镇布局,使其易于现有居民生活, 同时也会考虑一些未来的变化,如划分工业区和居民区,建在工业区的民居是不允许的,居民区的污水处理厂也是不允许的。城市就在这样的大原则下逐步演化。

      未来的变化很难预见,所以与其对所有变化的可能性进行预测,不如做一个允许变化的计划,为此,应该:专注在大方法向,避免对所有事件做过于详尽的设计,只在有限的情况下参与到非常具体的细节实现中来,要保证系统不但能够满足当前的需求,还能应对将来的变化。因而,我们更愿意把架构师叫成演化式架构师。

 

演化式架构师的职责

      1.关心服务之间的事务,多于关注服务内部发生的事情

      这并不意味着服务内部的完全自治,这要视情况而定,如果整个团队采用了10种不同的技术栈,可能意味着团队的学习成本更高;或者每个服务暴露出来的接口标准都不一致,这将造成灾难。最低的要求是花时间跟每个服务团队在一起工作。

      2.让系统设计原则服务于最大目标,让实践来巩固原则

      假如公司的目标是:快速占领东南亚新市场,那么你的原则可能就是要求服务必须能方便地部署到相应的国家,在实践层面,我们可能会寻找能提供全球化的云厂商来实现我们的需求。

原则与实战有时难以区分,但只要把握:重要的原则用来指导系统的演化,同时也要有一些细节来指导如何实现这些原则,就可以了。

      3.全局掌控微服务的状态

      必须全局掌握微服务的健康状态,将这些状态信息进行统一管理。

      要全局掌握微服务的安全性,不能让一个异常的服务毁了整个系统,因此每个服务必须很好地应对其他服务的错误请求。

      4.代码治理

      提供最佳实践范例和代码模板来保证质量,提供统一的服务来保证效率,在DRY中寻求平衡。

      5.技术负债

      有时为了服务于最大目标,在短时间内可能会忽略一些原则和最佳实践,虽然这短期能带来一些利益,但长期来年进要付出代价的。

      不光走捷径会引入技术负债,有时系统的目标发生改变也会引用技术债务。

      架构师应能提供一些温和的指导,然后让团队自行决定如何偿还这些技术负债。

      6.团队领导

      不要总是施加你的影响力,与各个服务团队一起工作,即使时间不那么多,从而了解所做的决定对团队造成的影响。可以从各服务团队抽一个人出来形成一个团队治理小组。

 

参考

      《微服务设计》(Sam Newman 著 / 崔力强 张骏 译)


相关文章: 

  • 微服务的概念——《微服务设计》读书笔记

原文地址:http://www.cnblogs.com/gudi/p/6591246.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android RaingBar评分条的使用

概述 RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator)&#x…

理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似。你可以用它们声明的变量赋任何类型的值。 看看下面的示例: var a 1;object b 1; dynamic c 1; 你还可以使用关键字为它们赋上更加复杂的类型 var a new string[]{"1"};object b new …

获取笔记本的SHA1的值。

开发Android几年来,经常出现这样的情况,每次使用到地图的时候,不知道如何获得笔记本的SHA1值,尤其是在跟换笔记本开发的时候。 因此在CSDN上做一下笔记! 进入cmd模式 cd C:\Users\Administrator.android> 输入keyto…

建模:确定服务的边界——《微服务设计》读书笔记

什么样的服务才是好的服务? 高内聚、松耦合的服务才是好的服务。简而言之,就是把相关性强的放在一起,相关性不强的分开,物以类聚,人以群分,服务的划分也是这样。这就需要确定什么要放在一起,什么是要分开的…

谈谈系统稳定性设计

转载自 谈谈系统稳定性设计 一、差旅随想 因为base在分公司,需要经常去总部出差,所以搭乘飞机成了家常便饭,很多时候坐在飞机上会不由的感叹,设计制造这样精密复杂的机器的那帮人真的是了不起,他们是怎样保证这样一台…

Android使用MPAndroidChat

参考文档: https://blog.csdn.net/u013184970/article/details/52095170 https://blog.csdn.net/cen_yuan/article/details/52204281 注意: 在要使用的module的build.gradle添加: dependencies { compile ‘com.github.PhilJay:MPAndroidChart:v3.0.0-be…

微服务集成——《微服务设计》读书笔记

一.理想的集成应该是什么样的? 1.避免破坏性修改 如果在一个微服务的响应中添加一个字段,服务的消费方不应该受到影响。 2.保证API的技术无关性 微服务之间的通信应该是与技术无关的。 3.使服务的消费方易于使用 如果消费方使用该服务比登天还难&…

什么是加密算法

转载自 什么是加密算法 Java的加密知识也是Java常见的领域之一,加密技术的底层确实很复杂,运用了大量的数学知识,要弄明白非常复杂。但是Java语言中运用密码加密工具却是非常简单。我们在Java里面运用这些加密技术,只需要把原理…

Android传感器的使用

Android 中主要的传感器有以下几种 TYPE_ACCELEROMETER 加速度传感器又叫 G-sensor,该数值包含地心引力的影响,单位是 m/s 测量应用于设备 x 、y、z 轴上的加速度。 将手机平放在桌面上,x 轴默认为0,y 轴默认0,z 轴默…

理解C# 4 dynamic(2) – ExpandoObject的使用

ExpandoObject的使用非常简单,很容易入手。上一篇里面已经有详细的介绍了,可以看这里(理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用) 下面对ExpandoObject的使用场合和一些认为需要注意的地方,谈一下自己的看法: 一…

谈谈服务限流算法的几种实现

转载自 谈谈服务限流算法的几种实现 保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。今天和大家谈谈限流算法的几种实现方式,本文所说的限流并非是Nginx层面的限流,而是业务代码中的逻辑限流。 为什么需要限流 按照服务的调用方&…

Android如何实现NoActionBar以及Theme.NoTitleBar.Fullscreen效果

效果一 NoActionBar 无论Activity继承自Activity还是AppCompatActivity 只需要在styles中的修改Theme <style name"AppTheme" parent"Theme.AppCompat.Light.NoActionBar"><!-- Customize your theme here. --><item name"colorPrima…

自己动手写一个能操作redis的客户端

转载自 自己动手写一个能操作redis的客户端 引言 redis大家在项目中经常会使用到。官网也提供了多语言的客户端供大家操作redis,如下图所示 但是&#xff0c;大家有思考过&#xff0c;这些语言操作redis背后的原理么&#xff1f;其实&#xff0c;某些大神会说 只要按照redis…

离线安装 VS2017 的正确姿势

国内的网络环境&#xff0c;真的是有很大的不同&#xff0c;有的人装 VS 的时候&#xff0c;号称满速&#xff0c;有的人&#xff08;其实就是我&#xff09;要等它下载很久&#xff0c;还告诉我有个组件没有安装成功。很久很久以前&#xff0c;VS 是提供 ISO 版的离线安装包的…

Android中ImageView的旋转与缩放

说明在代码中已经注释 XML代码 <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"wra…

ASP.NET Core MVC四种枚举绑定方式

前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便&#xff0c;之前我们探讨过在ASP.NET MVC中下拉框绑定方式&#xff0c;这节我们来再来重点看看枚举绑定的方式&#xff0c;充分实现你所能想到的场景&#xff0c;满满的干货&#xff0c;你值得拥有。 探讨枚举绑…

关于分布式事务、两阶段提交协议、三阶提交协议

转载自 关于分布式事务、两阶段提交协议、三阶提交协议 随着大型网站的各种高并发访问、海量数据处理等场景越来越多&#xff0c;如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。 为了解决这样一系列问题&#xff0c;大型网站的架构也在不断发展。提高…

React对标签属性进行限制(props)

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>对props进行限制</title> </head> <body><!-- 准备好一个“容器” --><div id"test1"></div><div …