﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-silvermyth-文章分类-架构</title><link>http://www.blogjava.net/silvermyth/category/55181.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 02 Apr 2017 23:50:19 GMT</lastBuildDate><pubDate>Sun, 02 Apr 2017 23:50:19 GMT</pubDate><ttl>60</ttl><item><title>架构系列之二：分层架构</title><link>http://www.blogjava.net/silvermyth/articles/432423.html</link><dc:creator>Gavin Li</dc:creator><author>Gavin Li</author><pubDate>Fri, 31 Mar 2017 15:31:00 GMT</pubDate><guid>http://www.blogjava.net/silvermyth/articles/432423.html</guid><wfw:comment>http://www.blogjava.net/silvermyth/comments/432423.html</wfw:comment><comments>http://www.blogjava.net/silvermyth/articles/432423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/silvermyth/comments/commentRss/432423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/silvermyth/services/trackbacks/432423.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; &nbsp;设计一个架构，面临的首要问题是如何进行分解，分解后的组件相互如何组织在一起。从这个意义上说，架构有很多种，而最典型并且在企业中应用最广泛的非分层架构莫属了。分层架构直观来讲就是一种&#8220;分层蛋糕&#8221;，每一层都依托在其下层之上，上层使用下层定义的各种服务，而下层对上层一无所知。这方面的例子非常多，例如计算机本身分成硬件抽象层，操作系统层，系统软件和应用软件层，互联网ISO 7层架构等等。这也印证了一句名言--&#8220;计算机中的任何问题都可以通过增加一个中间层来解决&#8221;。<br />
&nbsp; &nbsp; 分层架构具有很多优势：<br />
<ul>
     <li>&nbsp; &nbsp; 上层无需了解下层的实现细节，每一层都是一个有机整机；例如无需了解以太网如何运行，你依然可以用TCP/IP协议来编写FTP服务。这一点对于广大技术人员尤其是程序员至关重要，否则我们每次编写应用的时候都既要知道硬件、又要了解操作系统，还要懂编译器</li>
     <li>&nbsp; &nbsp; 下层可以实现透明的替换，只要替换前后提供相同的服务接口。例如FTP服务可以运行在PPP上，也可以运行在以太网上</li>
     <li>&nbsp; &nbsp; 层次之间的依赖很小，例如只要TCP/IP协议不变，FTP服务就不变，无论数据链路和物理层发生怎样的变化</li>
     <li>&nbsp; &nbsp; 分层明确了了每层的功能和接口，有利于进行标准化</li>
     <li>&nbsp; &nbsp; 下层可以为上层多个服务提供支持，只要服务遵循相同的调用接口</li>
</ul>
&nbsp; &nbsp; 分层架构同时也有自身的缺陷，主要有以下两点：<br />
<ul>
     <li>&nbsp; &nbsp; 层次不能封装所有的东西，最典型的代表就是如果要在用户界面显示增加一个数据域，则数据库中需要增加相应的字段，并且业务层也需要做相应的修改。</li>
     <li>&nbsp; &nbsp; 过多的层次会加大调用开销，从而影响性能。</li>
</ul>
&nbsp; &nbsp; 企业应用架构的演变经过了以下几个阶段（主要是指单个应用的架构）: <br /><ul><li>&nbsp; &nbsp; 两层架构 - 以客户机/服务器系统为代表，客户端（胖客户端）负责用户界面和业务逻辑，服务器就是关系型数据库。常见的工具有VB，PowerBuider等，一般来说这个阶段业务比较简单，主要就是数据库的增删改查，通过用户界面上的SQL感知控件来连接和操作数据库。</li><li>&nbsp; &nbsp; 三层架构 - 我认为也可以称为四层架构（如果算上数据库），即表现层、领域层和数据源层。表现层用来处理与用户的交互，可以是命令行、胖客户端或者web界面；数据源层主要关注和其它系统的交互，如数据库、消息系统、缓存或其它；领域层主要负责执行领域逻辑，完成相关的计算。</li></ul>&nbsp; &nbsp; 在本系列中，我们主要关注分层架构，至于后来出现的SOA和微服务架构，以及驱动这些架构出现的原因，会在另外的文章中分析。<br />&nbsp; &nbsp; 另外，对于三层架构，我们需要注意以下几点：<br /><ul><li>&nbsp; &nbsp; 三层架构的每一层可以在垂直方向上进行再拆分，形成不同的软件包，例如表现层分为命令行和web界面，数据源层分为数据库、文件系统等</li><li>&nbsp; &nbsp; 在实际应用中，下层对于不相邻的上层并不是完全透明的，例如有时为了效率或其它考虑，可能会从表现层直接访问数据源层</li><li>&nbsp; &nbsp; 分层架构指的是逻辑上的分层，而从物理上来看，可以有多种部署架构。例如Java中可以三层都放在同一个JVM（Tomcat）中；也可以把表现层放在Tomcat中，而业务逻辑放在JBoss EJB（另外一个JVM，甚至是不同的服务器）中。</li></ul><img src ="http://www.blogjava.net/silvermyth/aggbug/432423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/silvermyth/" target="_blank">Gavin Li</a> 2017-03-31 23:31 <a href="http://www.blogjava.net/silvermyth/articles/432423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>架构系列之一：架构初识</title><link>http://www.blogjava.net/silvermyth/articles/432422.html</link><dc:creator>Gavin Li</dc:creator><author>Gavin Li</author><pubDate>Thu, 30 Mar 2017 15:43:00 GMT</pubDate><guid>http://www.blogjava.net/silvermyth/articles/432422.html</guid><wfw:comment>http://www.blogjava.net/silvermyth/comments/432422.html</wfw:comment><comments>http://www.blogjava.net/silvermyth/articles/432422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/silvermyth/comments/commentRss/432422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/silvermyth/services/trackbacks/432422.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; 在开始这个系列之前，让我们来思考一个问题，什么是架构？当我们在谈到架构的时候，我们指的到底是什么？很多人都尝试给架构下一个定义，但是这些定义本身很难统一，结合我的理解，我认为架构的内涵包括以下内容：<br /><ol><li>最高层次的系统分解</li><li>系统中难以改变的东西</li><li>架构包括组成部分和这些组成之间的交互<br /></li></ol>架构是分层次的，不同层次的架构关注的内容不同，描述方法不同，实现方式也不同。按照TOGAF的定义，架构主要分为几个层次即业务架构、应用架构、数据架构和技术架构。<br /><ul><li>业务架构 - 关注组织（类如企业）的业务流程、业务域和业务组件</li><li>应用架构 - 业务架构中的流程和组件应该分成多少应用，应用之间如何集成和交互</li><li>数据架构 - 物理和逻辑数据的结构</li><li>技术架构 - 技术架构是应用架构的技术需求，包括<span style="font-family: simsun;">如何进行纯技术层面的分层，开发框架选择，语言选择，涉及到各自非功能性需求的技术点（安全，性能，日志，异常，缓存，消息，大数据量）等需要使用的关键技术<br /></span></li></ul>关于架构层次的划分和相互之间的关系，可以参考http://blog.sina.com.cn/s/blog_493a84550101cfen.html。如果没有特别指明，文章包括后续的架构都指的是技术架构。<br />既然有了架构，就应该可以判断一个架构是好还是坏的，或者说哪方面好、哪方面坏；一个架构的衡量主要通过以下的系统特性来进行：<br /><ul><li>系统高可用性</li><li>系统性能（包括响应时间、吞吐量等）</li><li>系统伸缩性</li><li>系统可扩展性</li><li>系统安全性<br /></li></ul>我们要认识到，不同行业的架构复杂性有很大差别，例如电信行业的架构可能需要重点关注硬件设备，而企业应用一般来说业务逻辑复杂并且数据量大。在设计架构时，需要根据实际情况进行综合考虑，没有最好的架构，只有最合适的架构；架构的核心理念就是两个字&#8220;平衡&#8221;，根据业务需求找到多个系统特性之间的平衡点，它反映了业务、应用、技术甚至是组织架构间的博弈过程。<img src ="http://www.blogjava.net/silvermyth/aggbug/432422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/silvermyth/" target="_blank">Gavin Li</a> 2017-03-30 23:43 <a href="http://www.blogjava.net/silvermyth/articles/432422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>