技术架构的战略和战术原则_第1页
技术架构的战略和战术原则_第2页
技术架构的战略和战术原则_第3页
技术架构的战略和战术原则_第4页
技术架构的战略和战术原则_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技术架构的战略和战术原则技术架构,是将产品需求转变为技术实现的过程。技术架构解决的问题包括了如何进行纯技术层面的分层、开发框架选择、语言选择(这里以JAVA语言为主)、涉及到各自非功能性需求的技术点(安全、性能、大数据)。技术架构是确定组成应用系统实际运行的技术组件、技术组件之间的关系,以及部署到硬件的策略。技术架构面临最大的挑战是“不确定性”。在技术架构上,很多时候就会面临这种选择。是要选择业界最新的技术?还是选择团队最熟悉的技术?如果选择最新的技术,遇到新技术出了问题怎么解决?如果选择目前熟悉的技术,后续技术演进怎么办?这些都是架构师在做技术架构过程中需要考虑的。业务在千变万化、技术在层出

2、不穷,没有一套通用的技术架构模式来适用所有的系统。那么,我们如何保证在做技术架构时,能够实现一个稳定、出色的系统。面对这些“不确定性”时的架构设计问题,这里从战略和战术两个层面来提供一些设计原则。战略层提供的是技术架构的方法和思路,属于顶层设计;战术层提供的是技术架构的技术实践方式,更偏向详细设计。战略层设计原则战略层的设计原则就是:合适原则、简单原则、演化原则。合适原则技术人员有一种很强的技术情怀,就是在做设计的过程中,很希望挑战新的技术、在项目中采用最新的框架、或者自己重造一个比业界的还要牛的轮子。这样才能够显示出自己的优秀,以至于不让自己显的那么平庸。比如,在项目中重新造一个能够解决亿万

3、级数据的新的xx流式计算技术,比flink还要牛一百倍;有或者在项目中使用最新的xx技术,能让系统承担亿级用户的访问。那么现实是,如果在设计过程中一味追求新技术,往往失败的可能性很高。没有那么多人,却想干那么多活现实环境中我们一个业务团队可能就十几个人,项目工期短、上线要求快。在这种情况下,如果还要抽调几个人去研究、搭建、维护新的技术框架,对于项目势必会造成延期的影响。1.没有那么多积累,却想一步登天很多业界领先的方案,不是一帮优秀的开发加在一起,加班加点就能做出来的。而是经过几年时间的发展才逐步完善和初具规模。如果我们也想自己做一套类似的技术,不是说不可能。我们需要集合当下的技术实力、技术积

4、累,做出适合自己团队情况的技术评估。1.没有最新,只要最合适所有新的技术刚出来都是打着比旧技术拥有更加出色的性能、提供更加优秀的扩展性。是不是使用新技术,就能解决一切问题了?新技术的出道,势必是解决某一场景下的问题,并不是一味万能良药。只有了解清楚每种技术的产生背景,适用场景,才能出一个对自己项目最优的选择。技术选型没有最新,只有最合适。总结一下,合适原则就是适合优于业界领先。简单原则我们总是希望能将我们的软件设计的精美、宏大,这样才能彰显我们系统的复杂度和难度。我们是不是会遇到这样的场景,在做设计方案的时候,如果一个解决方案很简单,而且能很快的满足需求。在评审方案时,就会有人觉得这个方案是不

5、是太简单了,没有什么技术含量,是不是需要再设计的复杂一点。系统是不是一定要设计的复杂?在回答这个问题前,我们先看下软件领域的结构复杂性和逻辑复杂性。(1)结构复杂性结构复杂的系统有两个特点:第一,组成的组件数量很多;第二,这些组件之间的关系很复杂。结构上的复杂性存在的第一个问题是,组件越多,就越有可能其中某个组件出现故障,从而导致系统故障。假设组件的故障概率是1%(有1%的时间不可用),那么2个组件的系统可用性是99%*99%=98%,5个组件的系统可用性是99%*99%*99%*99%*99%=95%,两者相差3%。说明组件越多,系统稳定性就越差。结构上的复杂性存在的第二个问题是,某个组件改

6、动,会影响关联的组件。比如上图中C组件发生改动,会影响A、B、D,而A有会影响E。这样就会形成一连串的多比诺效应。2)逻辑复杂性意识到结构复杂性的问题后,只要减少组件就能让系统结构变简单?这样做还是行不通,原因在于除了结构的复杂性,还有逻辑的复杂性,如果一个组件的逻辑太复杂,通用会带来问题。我们试想一下,把淘宝的所有功能都在一个组件中实现,可以想象这个系统要有多庞大:几百人维护一个系统、代码分支几十个、需求变更应接不暇、不同分支的回归测试、修改一段代码可能影响整个系统的运行等等。这些场景相信大家都不希望看到的。总结一下,简单原则就是大道至简。演化原则软件架构和建筑架构很多相同的地方,架构这个词

7、也是从建筑领域借鉴过来的。比如,软件架构描述的是系统的结构、以及各模块之间的关系。而建筑结构描述的是一幢建筑的结构,以及建筑内部各部件如何有机的组成。但是,软件架构和建筑架构有一个本质上的差异:那就是建筑一旦完成就不会再变,而软件却需要根据业务的发展不断的变化。对于建筑来说,永恒是主题;而对于软件来说,变化才是主题。如果没有意识到“软件架构需要根据业务发展不断变化”这个本质,在做架构设计的时候很容易陷入一个误区:试图一步到位设计一个软件架构,期望不管业务如何变化,架构都稳如磐石。如果是按照这样的目标是设计,一开始上来就做出一套看似是终极的方案,投入庞大的资源做各种预测、分析。结果是投入巨大的资

8、源、开发周期漫长,最终跌跌撞撞落地的系统,却发现已经无法很好的满足现有的业务。所以技术架构设计需要一个过程:首先,要满足当前的业务需求进行技术架构设计其次,架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使架构逐渐完善。第三,当业务发生变化时,架构要扩展、重构、甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计却可以在新架构中延续。总结一下,演化原则就是演化优于一步到位。战术层设计原则战术层的设计原则分为3部分:高并发原则、高可用原则、业务设计原则。这些原则是对技术架构设计过程中提供详细的指导思路,帮助你做技术选型、技术拆分。2.1高

9、并发原则设计高并发的系统,需要考虑以下几个方面的设计:无状态、拆分、服务化、消息队列、数据异构、缓存。(1)无状态无状态应用,便于水平扩展。有状态配置可通过配置中心实现无状2)拆分系统维度:按照系统功能、业务拆分,比如购物车、结算、订单等。功能维度:对系统功能再做细粒度拆分。读写维度:根据读写比例特征拆分;读多,可考虑多级缓存;写多,可考虑分库分表。AOP维度:根据访问特征,按照AOP进行拆分.模块维度:对整体代码结构划分web、service、dao。(3)服务化服务化演进:进程内服务-单机远程服务-集群手动注册服务-自动注册和发现服务-服务的分组、隔离、路由-服务治理。考虑服务分组、隔离、

10、限流、黑白名单、超时、重试机制、路由、故障补偿等。4)消息队列目的:服务解耦(一对多消费)、异步处理、流量削峰缓冲等。大流量缓冲:牺牲强一致性,保障最终一致性。数据校对:解决异步消息机制下消息丢失问题。5)数据异构数据异构:通过消息队列机制接受数据变更,原子化存储。数据闭环:屏蔽多重数据来源,将数据异构存储,形成闭环。(6)缓存用户层:DNS缓存、浏览器DNS缓存、操作系统DNS缓存、本地DNS服务商缓存、DNS服务器缓存、客户端缓存、浏览器缓存、APP客户端缓存。代理层:CDN缓存(一般基于ATS、Varnish、Nginx、Squid等构建,边缘节点-二级节点-中心节点-源站)接入层:Ng

11、inx的Proxy_cache代理缓存,或者Nginx+Lua+Redis做业务数据缓存。应用层:页面静态化、业务数据缓存(Redis/Memcache/本地文件等)、消息队列数据层:NoSQL(Redis、Memcache、SSDB等)2.2高可用原则1.降级降级开关集中化管理:将开关配置信息推送到各个应用。可降级的多级读服务:如服务调用降级为只读本地缓存。开关前置化:如Nginx+Lua配置降级策略,引流流量;可基于此做灰度策略。业务降级:高并发下,保证核心功能,次要功能可由同步改为异步策略或屏蔽功能。限流目的:防止恶意请求攻击或超过系统峰值恶意请求流量只访问到Cache穿透后端应用的流量

12、Nginx的limit处理恶意Ip使用NginxDeny策略或者iptables拒绝可回滚发布版本失败时,可随时快速回退到上一个稳定版本。2.3业务设计原则防重设计幕等设计流程定义状态与状态机后台系统操作可反馈后台系统审批化文档注释备份技术架构图技术架构图是将系统的技术方案、技术选型通过视图的方式进行展现。技术架构图分为两类:一类,功能需求技术架构图(逻辑架构图),是描绘如何通过技术组件来实现系统产品功能的图。另一来,非功能需求技术架构图(物理架构图),是描绘如何通过物理部署的来实现系统运行的图。3.1逻辑架构图功能需求技术架构图以产品架构图和应用架构图为基础。实现每个功能点需要使用什么技术、

13、技术实现逻辑如何,就提现在技术架构图上。功能需要技术架构图绘制可以按照“整体-局部-整体”的思路实现。1.整体首先可以按照应用架构图的应用分布得到应用分布框架。如下:I风I蚓華I轴犯准实砖潍赠能!4aar,M:nnA1_諦料!处置中*心事件itl1111i2.局部0则以心i在整体框架的基础上,对每一个局部的子系统进行详细的技术实现的表达。子系统的技术架构图中需要展示每个子系统使用的技术组件,比如(缓存技术、消息中间件、流程引擎、流式计算框架等等)。同时,这些技术组件是如何实现业务功能,需要清晰的展示技术实现逻辑。下图是对风控系统中的实时引擎、离线引擎、准实时引擎三个子系统的进行的技术架构。在实

14、时引擎中,主要使用RuleEngine(规则引擎)作为技术特点,这里就重点列出RuleEngine。准实时引擎使用Blink作为流计算的技术框架,并概要的展示了计算逻辑。II扑民佝ZDB粥引IF腰旳引舉iteEngineOOPS財和*msci*炉湧弓r】革層F.fdlKEDBD2(i业灵强遡艦cpensesic-m.SM也心在完成每个子系统的技术实现后,最终进行一次整合,绘制一张总体的系统技术架构图。各子系统之间通过服务接口、数据库、缓存或消息中间等技术实现数据交互,以此将打通各个子系统,实现最终整个产品从数据、技术的串联。Id5:TTII扑民佝ZII扑民佝Z*IiIIIIllIRuleEngiBsourceiiBndr:ivratbni50UKE异常方件DE爭迹自训*塔蒯litII扑民佝ZII扑民佝Z物理架构偏重于网络设计统在物理上是如何部署。行时的组织情況。从物理集群设计、中间件设计、上是如何部署。织情兄。从物理勺图中,我们能,IDa0地拠帕如:I(硬件的设计架构。非功能需求的技术架构图重点在于展示企业系间的关系以及他们的部署策略。物理架构反映出软件系统动态运、流量访问、数据流转、数据存储到技术组件的运转。*昨-宦时礦砸苗::*煙卜起fffiS*DB3.2物NgnxNgir:;我们从架构的本质开始,分别对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论