`
QING____
  • 浏览: 2253401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《架构师》期刊摘要(2016年)一

 
阅读更多

一、《软件设计精要与模式》作者张逸在接收InfoQ采访时曾说:“评价一个架构的优劣方法之一是,把每个功能、非功能的因素扩大化,再看这个架构会不会出问题。”(本人赞同此说法)他的观点是说,架构设计要面向业务未来,而未来是不断发展的。架构不仅要承载业务的增长,还要兼顾技术发展的趋势。

《前言》(2016年6月)

 

二、我想任何人做架构多需要秉承“业务需求决定技术演化路线”的思路,那些暴露出来的现状和问题都驱动系统去转型,在系统和人之间找到一种最佳的合作模式,匹配已有的生产力和生成关系。正如软件开发学泰斗Kent Bech所说的:设计,是让你在长期过程中保持软件变化更加容易。

 

    在体量还不大的情况下,首先应该解决的是搭建好一套绝对稳定的基于模块化的平台,待体量逐渐长大、再去根据实际需求进行拆分、团队也随之变化。再下个阶段体量大道饱受单体模式智库,也应该首先建设平台服务,建设好之后,先按照大的粒度进行拆分,逐步再微服务化,否则,直接上服务化甚至微服务化都是非常危险的。

 

    微服务化就是以一系列小的服务开发支撑一个应用的方法论,服务独立在自己的进程中,通过轻量级通信机制交互(通常为HTTP),这些服务时围绕着业务上的组织结构来构建的,全自动的、独立部署。几乎看不到中心化的服务管理基础设施,可以使用不同的编程语言和数据存储技术来实现不同的服务。

《Building Microservices》一书中提到“微服务化就是一堆小而自治的服务,让他们一起工作起来”。微服务化的特点在于:

 

    1、模块即服务

    微服务中的组件在逻辑或者物理层次更趋于细分,这个细分不是极致的,而是一种力度适中的选择,通常这些组件在前期可以是一些模块,但是当需要时,例如业务上需要拆分独立,或者非功能需求上需要扩容等,都可以灵活的拆解出来。

    2、独立自治

    这意味着服务独立开发、独立测试,独立发布、独立部署、独立运维的,某个细分团队负责整个生命周期管理,这就是“康威定律”的通俗解释,官方解释是“一个组织的设计成果,其结构往往对应于这个组织中的沟通结构”,服务的规划不就是多人、跨团队协作的沟通模式吗?

    同时去除了牵一发而动全身的问题,单一职责的来进行修改需求或者重构一个点,开发和构建方便,不影响整个产品的功能,一个bug不会crash掉整个产品,针对不同的类型,区分“计算密集型”还是“IO密集型”,区分业务上更好使用关系型还是NoSQL,区分2/8原则(即80%经常修改的服务独立出来自成一家),区分短板功能、针对瓶颈可以做水平扩展、避免资源竞争,甚至可以区分技术栈、突破语言限制独立的服务可以实现非常大程度上的复用,服务之间依赖轻量级的接口,而不是模块。

 

    3、去中心化的数据管理

    微服务在服务拆分的同时,也需要将数据库分离,独立的服务维护独立的数据库,这对数据库也是减负,同时技术选型、SLA保证都会区分开来,把精力留给那些重要的业务数据库,进行分级的对待,而不能像以前那样一视同仁,一个不重要的逻辑库的bad SQL慢查询,阻塞了其他正常的查询,这事完全可以避免的。

    4、轻量级的通信协议

    传统的SOA使用ESB或者WebService这种重量级的解决方案,微服务推荐使用一些更轻量级的解决方案,要通用性,可以用RESTFul架构,使用HTTP通道,支持JSON序列化协议;需要高性能的,可以考虑使用高性能IO模型,比如Epoll、Actor等,基于TCP通道,使用protobuf序列化协议,同时保持长连接;要异步,可以通过持久的RabbitMQ或者高性能的ZeroMQ来做P2P、pub/sub等。而这种轻量级还需要体现在代码调用中,模块化直接通过函数、方法调用即可,服务化后能不能在API层面做到无侵入、无缝切换、简单配置,这些都是服务化框架要支持的。

    5、为失败设计

    服务化,因为着调用时跨进程的、分布式的,这种分布式特性引起的天然不可靠性,需要变为相对可控。也就是服务间的通信要架设不会成功,为失败处理。

    为了不影响整个产品,要做错误隔离,可以考虑熔断(circut break)、船舱隔离模式、限流、回退等手段,最后还有幂等性等问题(重试会不会对业务造成影响)。

    6、基础交付设施自动化

    这个特点是整个微服务中最大的亮点,包括持续集成CI、持续交付CD和Pass平台结合。微服务在细分的背景下,在project结果、物理结果上都提高了一个复杂度,就需要在基础交付上做一个大的转变,自动化部署则是必须的。

    

    微服务的缺点:

    1、分布式调用造成的性能、延迟问题。(可以采取的措施包括粒度适中、批量、高性能RPC、异步通信等)

    2、可靠性不好保证。(为失败而设计)

    3、数据一致性难以保证。(分布式设计本身涉及到的问题,最终一致性、强一致性等)

    4、整体复杂度提升。服务多、依赖多、调用多、契约如何管理、监控如何做,调用链上怎么确定哪个点有问题,服务的SLA保障、性能、错误率、告警、集成测试、部署等。

 

    架构只是标准、骨骼,对微服务的讨论不应该让我们忘记了更重要的问题,驱动软件项目成功和失败的重要因素。软因素,比如团队中人的素质、以及他们如何彼此合作、沟通,这都会丢是否使用微服务有很大的影响。在纯技术层面上来讲,应该把重点放在干净的代码、完善到位的测试,并持续关注架构演进,这才是一个软件工程师的根本职责。

《谈谈后端业务系统的微服务化改造》(2016年6月)

 

三、传统的企业级应用是单体应用,一般是分层结构,如表现层、应用层、领域层、数据层,这主要是水平切分的思想。

    随着互联网应用的发展,特别是大型电商系统,业务非常复杂。这种巨型系统,首先要关注的是如何根据业务划分子系统,然后是子系统间如何协作,最后才是子系统内部实现。SOA设计可以有效支持前面两步,在SOA体系里,每个子系统是独立的服务,服务接口体现子系统协作关系,至于子系统内部,直接作为黑盒处理。

 

    所以对于复杂系统,首先采用SOA垂直切分子系统,然后使用分层设计水平切分大单个子系统,服务化把传统的分层设计往前更推进一步。

 

    当然SOA本身也在不断发展,最初跨企业的Web Service交互可以认为1.0时代,支持企业内部系统间轻量级访问、支持服务治理,可认为是2.0时代;服务进一步分层和微服务化可认为3.0时代。

 

    “业务在变,技术在变,架构也在变。变的是形式,不变的是本质,架构为了系统更有序,系统为了业务更快速,业务为了生活更美好”。

《卷首语--架构发展趋势和现状》(2016年三月)

四、

    “KumuluzEE是第一个使用标准Java API的微服务框架。微服务架构的重点是将应用程序开发成服务并将这些服务单独部署;没有一个框架提供自动化部署和配置,是不可能使用JavaEE实现真正的微服务架构的”。

 

分享到:
评论

相关推荐

    INFOQ 架构师期刊

    通过对2012年11月的INFOQ架构师期刊的分析,我们可以看到云计算、企业安全、企业架构以及最新的技术趋势等方面的重要内容。这些文章不仅提供了实用的技术指导,也为读者带来了对未来技术发展方向的思考。无论是对于...

    架构师2016系列

    这一系列涵盖了2016年全年的重要话题和趋势,旨在提升架构师在软件开发、系统设计和项目管理等方面的技能。通过对这些文件的深入学习,读者可以了解到2016年架构领域的核心概念、最佳实践以及新兴技术。 1. **软件...

    软考高级-系统架构设计师2009-2016历年真题及答案

    《软考高级-系统架构设计师2009-2016历年真题及答案》是一份涵盖了2009年至2016年间系统架构设计师考试的全面复习资料。这个压缩包包含了不同年份的上午试卷(综合知识部分)和下午试卷(案例分析与论文写作部分)的...

    高可用架构(期刊1-6期)

    pdf格式的高可用架构期刊 包含2016年1-6期 打包下载

    架构师(第1期).架构师(第2期).架构师(第3期).pdf

    架构师,这个在IT领域充满着技术智慧与策略智慧的词汇,不仅代表着一个职位,更是对个人专业能力及综合素质的极大认可。随着技术的不断进步和业务需求的日益复杂化,架构师的角色越来越凸显其重要性。《架构师》系列...

    【精心整理】系统架构设计师软考资料.zip

    2010年下半年系统架构设计师上午试题分析与解答 2009年下半年系统架构设计师上午试题分析与解答 2009年下半年系统架构设计师上午题 2009年下半年系统架构设计师下午试题I分析与解答 2009年下半年系统架构设计师下午...

    天翼云认证解决方案架构师

    天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接通过天翼云解决方案架构师认证考试。天翼云认证解决方案架构师题库知识点,帮你直接...

    测试架构师修炼之道:从测试工程师到测试架构师1

    《测试架构师修炼之道:从测试工程师到测试架构师1》这本书,就是为了指引那些期望在测试领域不断进步的工程师们,提供了一个清晰的成长蓝图。 ### 测试的核心——测试策略 测试工作并不仅仅是对业务的熟悉或者...

    2016AS全球架构师峰会【北京站】PPT,part1

    2016AS全球架构师峰会【北京站】PPT,part1

    架构师成长之路,架构师成长指南

    通过《架构师成长之路》这本书,读者可以系统地学习到这些关键的知识点,并结合实际工作经验,逐步成长为一名出色的架构师。书中的案例分析和实战指导,将帮助读者在理论与实践中找到平衡,加速自己的职业发展。

    一线架构师实践指南 电子书

    《一线架构师实践指南》是一本专为有志于或已经在IT行业中担任架构师角色的专业人士准备的电子书籍。该书旨在提供实用的、一线的架构设计与实施经验,帮助读者提升自己的专业技能,理解并解决实际工作中遇到的挑战。...

    2016年架构师速成教程(上)

    成为一名合格的架构师,需要经历菜鸟、码农、资深码农、项目经理、技术经理、架构师等一系列的过程。为了让大家通俗易懂,我把整个过程按照大家熟知的上学的顺序排了一下,从幼儿园-小学-中学-…一直到博士,至于...

    2009-2016软考系统架构设计师真题及答案解析.rar

    2009年至2016年的软考系统架构设计师真题及答案解析资源,对于准备参加此类考试的人员来说,是一份极具价值的学习材料。 这份压缩包包含了历年真题和答案解析,可以帮助考生了解考试的题型、难度以及考核的重点。...

    2016年互联网应用架构师课程

    2016年互联网应用架构师课程

    架构师的自我修养pdf

    一个优秀的架构师不仅要精通技术,还需要具备良好的沟通能力、管理能力和对业务的深刻理解。 架构师的核心职责是全面理解业务需求,基于模型和基础模式进行抽象和简化。他们需要提出恰当且可行的整体解决方案,同时...

    软考架构师2009-2022年真题附答案

    【软考架构师2009-2022年真题附答案】是一份集中的资源,涵盖了从2009年至2022年间的软件设计师资格考试(架构师级别)的实际试题及对应的答案。这个压缩包是备考者宝贵的复习资料,尤其对于那些希望在软件架构领域...

    2016AS全球架构师峰会【北京站】PPT.part1

    2016AS全球架构师峰会【北京站】PPT.part1 不少干货。

    系统架构师教程.pdf

    系统架构师需要掌握一系列的技术和理论知识,这些内容在“系统架构师教程.pdf”中得到了系统的介绍和阐述。 首先,系统架构师需具备扎实的计算机网络基础。计算机网络是现代信息系统不可或缺的组成部分,架构师应...

Global site tag (gtag.js) - Google Analytics