精华内容
下载资源
问答
  • 三层架构和MVC有明显区别的, 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的...
    三层架构和MVC是有明显区别的,
    三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
    1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。   
    2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。   
    3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。 
    MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。
    所以, .net的三层结构中,并没有action这个概念。
    可以这样说,如果深入理解了mvc,肯定是很容易理解asp.net的三层架构的。
    展开全文
  • SOA架构是什么

    万次阅读 2018-03-06 16:41:25
    SOA全英文Service-Oriented Architecture,中文意思是中文面向服务编程,一种思想,一种方法论,一种分布式的服务架构(具体可以百度)。 用途:SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时...

    SOA是什么?SOA全英文是Service-Oriented Architecture,中文意思是中文面向服务编程,是一种思想,一种方法论,一种分布式的服务架构(具体可以百度)。

         用途:SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时SOA又有一个名字,叫做服务治理。

         通过一个系统我们看一下架构的演变过程(由统一到分布式):

       

            当我们的项目比较小时,我们只有一个系统,并且把他们写到一起,放在一个服务器上,但是随着平台越来越大,数据量越来越大,我们不得不通过分库,把多个模块的数据库分别放在对应得服务器上,每个模块调用自己的子系统即可。

         

         随着我们系统的进一步复杂度的提示,我们不得不进一步对系统的性能进行提升,我们将多个模块分成多个子系统,多个子系统直接互相调用(因为SOA一般用于大型项目,比较复杂,所以一般总系统不会再集成,会拆分多个,分别做成服务,相互调用)。当我们的电商UI进行一个下订单的任务时,多个服务直接互相调用,系统通过数据总线,分别调用对于的子系统即可。

         企业数据总线:企业数据总线不是对多个子模块的集成,他在这里充当数据通道的作用,数据总线不关心业务,数据总线根据给的地址和协议去调服务,上端不关心服务在哪里是什么,只找数据总线。

         上面几个图应该算是比较清楚了,随着业务的深入,我们不得不对系统进行调整,分别是对数据和业务的拆分,最后每个子系统对面提供服务。

         还要提的一点就是下面那个图,下面的IP库以及几个子系统是公共服务,分别向上提供功能,也是SOA方法论的一部分。

    二、SOA主要的使用场景,如下图:

       

    通过上面的图我们可以看出,多个子系统直接相互交互,相互调用非常凌乱,这样我们就很不爽,所以我们就用到了我们的SOA架构,SOA又叫服务治理,SOA就是帮助我们把服务之间调用的乱七八糟的关系给治理起来,然后提供一个统一的标准,把我们的服务治理成下图所示,以前我们的服务是互相交互,现在是只对数据总线进行交互,这样系统就变得统一起来。

    统一标准:各系统的协议、地址、交互方式。

    新的交互方式:各个系统分别根据统一标准向数据总线进行注册,各子系统调用其他子系统时,我们并不关心如果找到其他子系统,我们只招数据总线,数据总线再根据统一标准找其他子系统,所以数据总线在这里充当一个只路人的作用。

    SOA的好处:

      1、降低用户成本,用户不需要关心各服务之间是什么语言的、不需要知道如果调用他们,只要通过统一标准找数据总线就可以了。

     2、程序之间关系服务简单

     3、识别哪些程序有问题(挂掉)

    缺点:提示了系统的复杂程度,性能有相应影响。

    三、数据总线是什么?

          其实我在上面写了,数据总线是起到调度服务的作用,数据总线不是集成服务,数据总线更新一个调度框架,每个服务需要根据约定向数据总线注册服务,那么如何注册那?其实数据总线就像一个字典结构,

          数据总线里面一个key对于一个value,key指的是服务名,value则是服务的调度方式,还有一点需要说明的是,数据总线只是指路人,服务是不经过数据总线的,如上图的黄色线的路径。

         数据总线通过域名解析实现:一个域名绑定多台服务器,ajax也可以,dns也可以,解析域名嘛。

         其实数据总线还有一些高级应用,比如心跳检测,实现负载均衡等等,就不细说了,目前应用数据总线的有阿里的dubbo,还有zookeeper。

         基本上SOA的架构体系我的理解就是这样,上面配合图基本上也算清晰,如果哪里有不对的地方,欢迎大牛指出,大家可以互相探讨,相互学习。

    展开全文
  • 1. 五种主流的大数据架构1.1 传统大数据架构之所以叫传统大数据架构因为其定位为了解决传统BI的问题,简单来说,数据分析的业务没有发生任何变化,但是因为数据量、性能等问题导致系统无法正常使用,需要进行...

    1. 五种主流的大数据架构

    1.1 传统大数据架构

    65391e3d37441ea31e8bcb6cd6334fca.png

    之所以叫传统大数据架构,是因为其定位是为了解决传统BI的问题,简单来说,数据分析的业务没有发生任何变化,但是因为数据量、性能等问题导致系统无法正常使用,需要进行升级改造,那么此类架构便是为了解决这个问题。可以看到,其依然保留了ETL的动作,将数据经过ETL动作进入数据存储。

      优点:简单,易懂,对于BI系统来说,基本思想没有发生变化,变化的仅仅是技术选型,用大数据架构替换掉BI的组件。

      缺点:对于大数据来说,没有BI下如此完备的Cube架构,虽然目前有kylin,但是kylin的局限性非常明显,远远没有BI下的Cube的灵活度和稳定度,因此对业务支撑灵活度不够,所以对于存在大量报表,或者复杂的钻取的场景,需要太多的手工定制化,同时该架构依旧以批处理为主,缺乏实时的支撑。

      适用场景:数据分析需求依旧以BI场景为主,但是因为数据量、性能等问题无法满足日常使用

    1.2 流式架构

    af9a3d7e7b280181cad9a6815d59ab50.png

    在传统大数据架构的基础上,流式架构非常激进,直接拔掉了批处理,数据全程以流的形式处理,所以在数据接入端没有了ETL,转而替换为数据通道。经过流处理加工后的数据,以消息的形式直接推送给了消费者。虽然有一个存储部分,但是该存储更多的以窗口的形式进行存储,所以该存储并非发生在数据湖,而是在外围系统。

      优点:没有臃肿的ETL过程,数据的实效性非常高。

       缺点:对于流式架构来说,不存在批处理,因此对于数据的重播和历史统计无法很好的支撑。对于离线分析仅仅支撑窗口之内的分析。

      适用场景:预警,监控,对数据有有效期要求的情况

    1.3 Lambda架构

    be4a001a7d55680bc389f890b46e8012.png

    Lambda架构算是大数据系统里面举足轻重的架构,大多数架构基本都是Lambda架构或者基于其变种的架构。Lambda的数据通道分为两条分支:实时流和离线。实时流依照流式架构,保障了其实时性,而离线则以批处理方式为主,保证了最终一致性。流式通道处理为保障实效性更多的以增量计算为主辅助参考,而批处理层则对数据进行全量运算,保障其最终的一致性,因此Lambda最外层有一个实时层和离线层合并的动作,此动作是Lambda里非常重要的一个动作,大概的合并思路如下:

    274d1a825b466bbd2d7017f65dbabaff.png

    优点:既有实时又有离线,对于数据分析场景涵盖的非常到位。

      缺点:离线层和实时流虽然面临的场景不同,但是其内部处理的逻辑却是相同,因此有大量荣誉和重复的模块存在。

      适用场景:同时存在实时和离线需求的情况

    1.4 Kappa架构

    d859d4d71881f824e99c90edba4a6a44.png

    Kappa架构在Lambda的基础上进行了优化,将实时和流部分进行了合并,将数据通道以消息队列进行替代。因此对于Kappa架构来说,依旧以流处理为主,但是数据却在数据湖层面进行了存储,当需要进行离线分析或者再次计算的时候,则将数据库的数据再次经过消息队列重播一次即可。

      优点:Kappa架构解决了Lambda架构里面的冗余部分,以数据可重播的超凡脱俗的思想进行了设计,整个架构非常简洁。

      缺点:虽然Kappa架构看起来简洁,但是实施难度相对较高,尤其是对于数据重播部分。

      使用场景:和Lambda类似,该架构是针对Lambda的优化

    1.5 Unifield架构

    81e17430733bd2c6ccc0c4db38113605.png

    以上的种种架构都围绕海量数据处理为主,Unifield架构则更激进,将机器学习和数据处理揉为一体,从核心上来说,Unifield依旧以Lambda为主,不过对其进行了改造,在流处理层新增了机器学习层。可以看到数据在经过数据通道进入数据库后,新增了模型训练部分,并且将其在流式层进行使用。同时流式层不单使用模型,也包含着对模型的持续训练。

      优点:Unifield架构提供了一套数据分析和机器学习结合的架构方案,非常好的解决了机器学习如何与数据平台进行结合的问题。

      缺点:Unifield架构实施复杂度更高,对于机器学习架构来说,从软件包到硬件部署都和数据分析平台有着非常大的差别,因此在实施过程中的难度系数更高。

      适用场景:有着大量数据需要分析,同时对机器学习方便又有着非常大的需求或者有规划

    2. 收集各大互联网公司大数据平台架构

    1. 酷狗音乐的大数据平台架构:

    https://www.infoq.cn/article/kugou-big-data-platform-restructure

    62ca4f42d4c63036cbc41e28775b5bd1.png

    2. 滴滴大数据离线和实时平台架构和实践:

    https://myslide.cn/slides/15307

    feaae85b9d2d2bbd742363b9bc3ac7ae.png

    3. 美图大数据平台lamda架构

    https://www.infoq.cn/article/QycsTZSz0REAFTgmh_J0

    071fa7bc8c80639736e08015df9a023f.png
    展开全文
  • 架构思想

    千次阅读 2016-02-02 11:19:54
    0. 我前面所说的意思并不DataCenter交由APIManager管辖。而是有一个业务Manager,这个业务Manager管辖APIManager和DataCenter。 1. 这里应该没Table什么事儿。 你通过reformer取出来的recordArray里面的所有...

    0. 我前面所说的意思并不是DataCenter交由APIManager管辖。而是有一个业务Manager,这个业务Manager管辖APIManager和DataCenter。

    1. 这里应该没Table什么事儿。

    你通过reformer取出来的recordArray里面的所有record,都必须要符合CTPersistanceRecordProtocol。然后你会有一个DataCenter提供一个例如saveWithRecordList的方法,在这个方法里面,DataCenter操作CTPersistanceTable去存数据。由于recordArray中的每一个record都符合CTPersistanceRecordProtocol,因此每个record都可以直接参与Table的操作。

    2. 整个需求中你有三个角色:BusinessManager,APIManager,DataCenter。

    BusinessManager下辖APIManager,DataCenterManager。

    BusinessManager响应Controller的需求去调用APIManager,然后reformer是在BusinessManager里的。在API回调方法中拿着reformer去获得record,在获得record之后,一方面把recordArray交给DataCenter去存储,另一方面将这个recordArray交给Controlle去展示。

    你的WorkCirclePublicRecord没必要去继承CTPersistanceRecord,你的WorkCirclePublicRecord可以就是一个View,然后实现CTPersistanceRecordProtocol中的方法,就可以了。

    dictionaryRepresentationWithTable:方法是让你返回这个数据在数据库中的记录的dictionary的表达。传进来的table就是告诉你CTPersistance希望你返回的是这个表相关的dictionary记录,因为record有可能merge了多个表。你挑出你这个对象中跟数据库有关的几个property,然后把它组成字典return出来就好了。

    objectRepresentationWithDictionary:方法就是在CTPersistance拿到了dictionary表达的数据后,交给record让record去根据这个数据组装自己的方法。你也可以从中挑出你要的数据,赋值给自己的对象。比如挑出textContent赋值给自己的某个label。

    setPersistanceValue:forKey:就是CTPersistance有时候会单独取出记录中的某一个Key来赋值,你在这个方法中拿到key之后判断一下,然后给相应的对象赋值即可。如果key是title,那么你就找到你的titleLable,把titleLabel.text赋值为提供给你的value。

    mergeRecord:shouldOverride:的意思就是会给你一个record,然后希望你把这个record的值对应赋值给自己,你根据shouldOverride来决定当自己和record的同一个property都不为nil的时候,采用哪一个。

    optional中的availableKeyList:方法是当merge两个record的时候,你有可能不希望所有的key都参与merge,那么这个方法就提供你需要参与merge的key的列表。

    3. 其实你样例中的这部分代码是多余的。

    当APIManager拿到了dictionary的数据之后,直接丢给record的objectRepresentationWithDictionary:方法就可以了,这样record就会根据dictionary的内容组装好自己了。

    4. 同上

    5. 在2的回答中我已经告诉你协议里的方法都应该如何实现了。

    看完文章觉得懂了,其实只是你看懂我写的字了,看懂我说的逻辑了。但没有想明白背后的思想来源,没有想明白为什么是这个逻辑,所以不知道如何下手。要理解背后的思想,只有有足够的经验才能明白,这个没有捷径的。



    一个完整的API对应一个Manager,一组API对应一个Service。http://google/login和http://google/logout分别对应两个APIMananger,但是只有一个Service。



    1. APIManager只做网络相关的操作,不负责处理业务。reformer只负责做数据转化,也不算很涉及业务,主要是要跟view的需求做匹配。

    如果涉及storage,那这些是交给Controller去调度的。举个例子,API回来的数据要存本地。那么这个场景在我的设计下应该是这样一个过程:

    a. controller命令APIManager获取API数据,回调方法在controller内
    b. API调用成功,此时走到Controller内部的回调方法,这时候Controller拿着reformer去问APIManager要数据。
    c. 数据经过reformer的清洗:格式修改、空数据筛除、脏数据筛除等,得到一个可以直接用于本地化存储的对象。
    d. controller拿着APIManager使用reformer吐出之后的对象,交给StorageMananger,完成本地持久化。

    2. reformer其实是跟具体哪个view是不相关的。经过reformer得到的数据不光可以被一种View渲染,也可以被其他View渲染。Controller在其中的角色就是,controller知道自己管辖的那个View能够使用哪种类型的数据,然后controller再根据这个去选择合适的reformer(如果没有找到合适的reformer,那就自己写一个咯),把可以直接被那个view使用的数据交给view。

    所以,reformer吐出来的数据的key,是要跟着reformer走的,不适合放到ViewController里面去,因为reformer决定了数据输出是什么样的,controller根据数据输出的样子去选择reformer。

    3. 转变成model之后的数据,有的时候能保证直接被view使用,有的时候不能保证直接被view使用,比如附近房源列表API返回来的数据如果要在MKMapView上展示,就只能使用MKAnnotation,model是不能直接使用的。这是其一。

    API返回的数据不一定都是标准的,但会有不同来源的数据需要同一个view来渲染的情况,如果采用model,就会导致代码混乱。举个例子:租房列表API、新房列表API、二手房列表API,他们返回的数据格式是很有可能不一样的,因为在服务端他们就不处在同一个表,比如房子的名字一个叫name,一个叫houseName,一个叫propertyName。然而在iOS客户端,展现他们的UI却是相同的,只需要一个UITableView。如果用这些库转变成model,做这样的需求就很蛋疼。这是其二

    当你做迁移的时候,如果是model代码实体,你不能保证其他人在创建这个model的时候,以及后面维护这个model的时候不去包含其他的代码。一旦有这种情况,迁移起来就很蛋疼。用reformer就消除了model这一层,而reformer是属于非常独立的对象,迁移的时候非常方便。这是其三。

    4. 其实还是集约型还是离散型的问题。

    我这边是希望一个APIMananger对应单独的一个API。如果App需要的API数量非常多,APIMananger的数量也会多,这是合理的。比如你接下来要开发pad版app,pad版不需要phone那么多API,你只要挑几个APIMananger扔过去就可以了,维护起来还是很方便的。

    另外,如果你要针对单独的某个API做拦截器的操作,集约型的就很难做了。数量不怕多,整齐就可以了。离散型API的调用方式虽然也有缺点,但是相对而言,还是较集约型API调用方式为优。

    5. 哈哈,我要睡午觉了,回头晚点我再帮你看看~


    展开全文
  • 无论何种技术实现,其学习过程往往都是枯燥无味的,学的越深就越发如是,...目前我的理解是微服务是属于分治思想的一种,而分布式架构是基于微服务思想来搭建的一种可以无限扩展的超大型项目框架。 PS:分治思想(...
  • SOA总线架构

    2019-01-29 19:11:59
    前一阵换了份工作,来到新公司,恰好新同事问起SOA...SOA全英文是Service-Oriented Architecture,中文意思是中文面向服务编程,是一种思想,一种方法论,一种分布式的服务架构(具体可以百度)。  用途:SOA...
  • 业务架构是什么? 就像字面意思一样,是业务的架构,但是这么直白的解释,往往一下子就把人给搞晕了。 我们先不说为什么会这样,让我们来举一些其他架构的例子。 建筑自己的小房子 假如我们拥有了一块儿日朗风清,...
  • 你懂架构师吗

    2015-02-04 17:59:00
    今天跟Leader聊了下,基本上现在的思路没问题,我发现每次跟Leader开会都把握不了重点,他说的我好像很难领会他的意图或者他的真正意思是什么,而且记不住,很多时候记不住说的话,容易漏掉内容,难道需要录音?...
  • 什么是驱动?

    2019-08-13 17:57:08
    一、什么是驱动? (1)驱动一词的字面意思 (2)物理上的驱动 (3)硬件中的驱动 (4)inux内核驱动。软件层面上的驱动广义上指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。狭义上驱动...
  • 架构问题--削峰填谷

    2020-08-20 11:24:27
    什么意思呢,就是在某个时间端,请求的流量会突增,甚至超过系统所能处理的请求,之后可能又突降,系统空闲资源多;就形成了基于系统负载能力上下的流量高峰低谷。显然这会造成系统的不稳定,甚至系统的雪崩,
  • 程序设计思想

    2019-10-03 16:52:47
    ps(不喜勿喷)各种开发都一家 java/.net/……,只要思想在,万事不用愁! 为什么要用程序设计?程序面向对象思想,不要面向过程。面向对象的意思可以得到易扩展易维护易开发的过程。 通常设计应该由什么人来...
  • 首先,向读者介绍一下mvc架构,mvc一种源于桌面程序的架构模式,它的基本思想是把程序界面和业务逻辑分开,这样便于软件的后期维护,同时也方便开发时期分工及管理,mvc有很多有点所以现在已经被广泛的应用与web...
  • SOA全英文Service-Oriented Architecture,中文意思是中文面向服务编程,一种思想,一种方法论,一种分布式的服务架构(具体可以百度)。  用途:SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时...
  • linux驱动开发1之什么是驱动?

    千次阅读 2018-07-17 21:14:48
    1.什么是驱动? 字面意思驱动指驱使一个东西,让它动起来。 2.什么是linux驱动 驱动的本质电力驱动,而驱动代码只是给出了操作方法。 3.linux体系架构 分层思想 驱动的上面系统调用API 驱动的下面硬件 ...
  • Spring IoC的架构介绍

    2013-08-04 23:42:41
    谈到IoC,开发人员首先想到的一定Spring IoC,因为用的人实在太多了,不过今天要讲一下IoC——Inversion of Control,顾名思义就是“控制反转”的意思一种思想,不严谨地说也一种模式,而Spring IoC其实...
  • 本人在目前自己项目上所设计的web自动化测试架构,之前在 Page Object模式介绍 那到底什么是PageObject模式? PageObject 见名思意思,就是页面对象,也就是把界面定位和业务操作分开,在我现在团队我推行的...
  • 说是小型WebMap项目其实也算不上,因为仅仅受朋友之托用Google Map API开发了一个简单的页面而已,而我也不是什么架构设计师,也不会什么架构设计,甚至对架构都没有一个概念,按照我的理解,架构就是思想对一...
  • 一、什么是驱动? 1: 驱动一词的字面意思 2: 物理上的驱动 3: 硬件中的驱动 4: linux内核驱动。软件层面上的驱动广义上指:这一段代码操作了硬件去动,所以这一段代码就叫硬件的驱动程序。 狭义上驱动程序...
  • 什么是模块化设计? “没有统一的定义”。在20世纪50年代,欧美一些国家正式提出“模块化设计”的概念,把模块化设计提高到理论高度来研究,。目前,模块化设计的思想已经渗透到很多领域。在计算机领域,针对程序...
  • 讲解几个设计模式中的面向接口思想和基于.NET平台的分层架构中的面向接口思想,加深理解。...经常听到“面向接口编程”这个短语,那么它是什么意思?有什么思想内涵?和面向对象编程是什么关系?...
  • Spark设计思想浅析

    2015-10-21 01:40:00
    Spark is no rocket science!——博主 了解分布式计算的朋友,一定...可以脑补一下DAG什么东西:有向、无环、图,如是而已,意思实在再明白不过了。如果把DAG讲的复杂一点,还会涉及到DAG计算系统的三层...
  • 元数据是什么意思,是数据库的基础数据?还是指的是注解编程模式? 数据库要分片前期的准备工作是什么,怎么区分这表要分片? 文章中的库对于不同的数据库软件分别是指什么? 分布式事务如何处理? 分库分表在微服务...
  • Java 源码解读锁原理和设计

    千次阅读 2019-05-01 23:30:07
    大家在平时工作中经常会用到锁,但很少有人真正想清楚锁到底是什么,...锁住是什么意思 如何锁住的 如何释放的 AQS 的两种队列详解,设计原理和思想 锁的架构设计思想 希望您阅读后,能够自己写一把 Java 锁出来。...
  • 答.首先,我们明白restful是一种架构设计思想。我们先看REST是什么意思,英文Representational state transfer 表述性状态转移。 说通俗点就是通过URL来定位资源,通过GET,POST,PUT,DELETE等进行增删改查

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 129
精华内容 51
关键字:

思想架构是什么意思