5分钟 搞懂分布式架构与微服务
所谓分布式系统,是指一个完整的应用系统被拆分后,分别部署到不同的网络节点中,这样的系统往往是一些大型的系统。这种做法的好处是,可以提高系统的运算能力。与分布式系统相对应的就是 单体应用系统,单体应用系统的思想是all in one 思想, 就是全部在一起,一个系统的全部服务都集中在一个网络节点上。
所谓集群就是,相同的事情多个人做,比如在上图分布式系统中, 商品服务 被部署到一台机器上,但是如果在购物节时,请求太多,一台机器根本扛不住,这时我们也增加10台机器,这10台机器都部署 商品服务, 这样由这10台机器就组成了商品服务集群,集群的初衷就是提高系统的吞吐量,另一个就是提高可用性,比如一台服务器挂了,不至于服务不可用。
[上传失败(image-dc4d72-1607944513633)]
SOA 架构就是面向于服务的架构思想,本质上就是以服务为中心,把应用拆分为多个服务,抽离出可重用的服务,为每个服务的单独扩展和开发提高便利性。阿里的Dubbo 就是SOA服务架构的一种实现,事实上SOA并没有对服务间通信协议具体规定,可以RPC,可以HTTP。
微服务是一种SOA思想的延续,任然关注服务,但是强调是"微",微体现的是服务开发成分要低,职责要尽量单一,同时部署也要灵活方便。目前微服务是非常流行的一种软件架构,在Java生态中 SpringCloud就提供了微服务的全站解决方案。
分布式和集群都是从软件部署的角度描述,SOA与微服务是从软件的架构阐述。一个采用SpringCloud技术开发系统 必然是微服务,当然同时也是分布式系统,当然如果为了高可用,必定也采用集群。
我做过50w用户的小型棋牌游戏。 当时使用了20台服务器集群,前段服务器用websocket和客户端连接, 服务器是c++写的。 之后据说被人用nodejs重构了
大致说一下吧。 分布式有逻辑层和数据层这一分。而且架构也分前端(处理客户端连接和session管理)后端(负责数据, 业务)还有lbs服务器。 一般客户端访问lbs服务器, 会得到一个路由(前段服务器的ip),然后连接到前端上。 前端会生成session以及连接, 用户通过前端的接口来访问后端服务器来完成数据交互,
用到的技术有redis(数据共享以及缓存) mq(解耦合以及服务器之前的消息发送) rpc(服务器之间的数据实时同步) sysstat(子服务器状态监控)nginx(负载均衡。
比较PHP和JSP这两个Web开发技术 在目前的情况是其实是比较PHP和Java的Web开发 以下是我就几个主要方面进行的比较
一 语言比较
PHP是解释执行的服务器脚本语言 首先php有简单容易上手的特点 语法和c语言比较象 所以学过c语言的程序员可以很快的熟悉php的开发 而java需要先学好java的语法和熟悉一些核心的类库 懂得面向对象的程序设计方法 所以java不如php好学
Java首先要编译成字节码 class文件 然后在java虚拟机上解释执行 Java的Web开发首先最容易想到的就是JSP(现在已经到JSP ) 原来的java的Web开发都是用servlet来实现的 用servlet来开发需要程序员在java的源文件中嵌入大量的代码 所以后来就出现了JSP JSP可以方便的嵌入到文件当中 其实jsp文件在服务器上执行的时候首先会被应用服务器转换成servlet 然后再编译执行 Jsp可以通过servlet和JavaBean的支持产生强大的功能 JavaBean 是一种可复用的 跨平台的软件组件 使用javabean可以方便的实现java代码和的分离 能够增强系统的功能和软件的复用性
Java的Web开发属于SUN公司定义的J EE其中的规范 而且在J EE中包括了java的Web开发的所有方面 如 JSP Servlet JDBC JNDI JAVABEAN EJB等等 J EE就特别适合于做大型的企业级的应用
二 数据库访问比较
Java通过JDBC来访问数据库 通过不同的数据库厂商提供的数据库驱动方便地访问数据库 访问数据库的接口比较统一
PHP对于不同的数据库采用不同的数据库访问接口 所以数据库访问代码的通用性不强 例如 用Java开发的Web应用从MySQL数据库转到Oracle数据库只需要做很少的修改 而PHP则需要做大量的修改工作
三 系统设计架构比较
采用Java的Web开发技术 需要使用的是面向对象的系统设计方法 而PHP还是采用面向过程的开发方法 所以用Java进行开发前期需要做大量的系统分析和设计的工作
四 跨平台性
Java和PHP都有很好的跨平台的特性 几乎都可以在不作任何修改的情况下运行在Linux或者Windows等不同的操作系统上
五 开发成本比较
PHP最经典的组合就是 PHP + MySQL + Apache 非常适合开发中小型的Web应用 开发的速度比较快 而且所有的软件都是开源免费的 可以减少投入
Java的Web应用服务器有免费Tomcat JBoss等 如果需要更好的商业化的服务有 Web Sphere和 Web logic
六 分布式多层架构比较
PHP只能实现简单的分布式两层或三层的架构 而JAVA在这方面就比较强大 可以实现多层的网络架构 数据库层(持久化层) 应用(业务)逻辑层 表示逻辑层彼此分开 而且现在不同的层都已经有一些成熟的开发框架的支持 例如Struts就是利用java的Web开发技术实现了MVC的设计模式 而在业务逻辑层也有Spring框架 数据库持久化层有Hibernate等框架 这些框架可以方便开发者高效 合理 科学得架构多层的商业应用
下面简要的说一下Struts 它实质上是在JSP Model 的基础上实现的一个MVC(Model View Controler)框架 JSP Model 体系结构是一种联合使用JSP 与Servlet 来提供动态内容的方法 在Struts框架中 模型由实现业务逻辑的JavaBean或EJB组件构成 控制器由Servlet实现的 视图由一组JSP文件组成 采用Struts可以明确角色的定义和开发者与网页设计者的分工 而且项目越复杂 其优势越明显
七 源代码安全
PHP开发的程序的源代码都是公开的 他人拿到php开发的程序后都可以进行修改
Java开发的程序 最后用户拿到的是只是一些编译好的class类 无法看到完整的源代码 安全性高
八 性能比较
有人做过试验 对这两种种语言分别做回圈性能测试及存取Oracle数据库测试
在循环性能测试中 JSP只用了令人吃惊的四秒钟就结束了 * 的回圈 而PHP测试的是 * 循环(少一个数量级) 却分别用了 秒
数据库测试中 二者分别对 Oracle 进行 次 Insert Update Select和Delete JSP 需要 秒 PHP 需要 秒
项目
PHP
JAVA
可复用性
低
高
开发速度
快
慢
易维护性
差
优
可移植性
优- Linux
Windows Unix
安全性
低
高
开发费用
低
高
多层架构
差
优
数据库访问
接口不统一
接口统一
可扩展性
差
优
面向对象
差
优
lishixinzhi/Article/program/PHP/201311/21447
● 水平扩展:服务器可以根据承载量的变化进行扩展。
● 负载均衡:多台服务器进行请求的负载,以保证忙时各服务器都忙,而不是一部分很忙,一部分很闲。
● 高可用:一个服务器节点挂掉,不会影响到其他节点,并能快速做故障的转移和恢复。比如10台服务器挂了2台,不会因此影响到20%的用户。
● 数据一致性:分布式环境下能保持数据存储的一致性。
访问层
解决流量接入问题(LVS、Nginx)
接口层
解决API网关处理(HTTP)
服务层
服务通信(同步调用的Dubbo,异步回传调用的MQ),
任务调度(单体应用的Quartz,分布式分配应用的ElasticJob),
业务服务(业务逻辑封装),
基础服务(隔离、缓存、队列管理),
服务管理(服务配置、服务治理),
监控(软件层面埋点统计的Cat、硬件资源维护管理的Zabbix)
存储接入层
数据逻辑拆分(管理分布式存储服务,并对上层提供像MyBatis、DAO的接口的MyCat),
搜索引擎(基于分布式无中心节点管理方式的ES Client),
缓存服务(类似MyCat做Redis集群支持的Redis Proxy)
存储层
数据存储( NoSql Database(MnogoDB、Solr_Elastic Search),缓存(Redis、Memcached),Sql Database(Oracle、MySql))
分布式架构CORBA (Common Object Request Broker Architecture) 是在1992年由OMG(Open Management Group) 组织提出的。那时的分布式应用环境都采用Client/Server架构,CORBA的应用很大程度的提高了分布式应用软件的开发效率。 当时的另一种分布式系统开发工具是Microsoft的DCOM(Distributed Common Object Model)。Microsoft为了使在Windows平台上开发的各种应用软件产品的功能能够在运行时(Runtime)相互调用(比如在Microsoft Word中直接编辑Excel文件),实现了OLE(Linked and Embedded Object)技术,后来这个技术衍生为COM(Common Object Model)。 瑭锦-TANJURD表示随着Internet的普及和网络服务(Web Services)的广泛应用, Browser/Server架构的模式逐渐体现出它的优势。于是,Sun公司在其Java技术的基础上推出了应用于B/S架构的J2EE的开发和应用平台;Microsoft也在其DCOM技术的基础上推出了主要面向B/S应用的NET开发和应用平台。
服务器集群:
服务器集群就是指将很多服务器集中起来一起进行同一种服务,在客户端看来就像是只有一个服务器。集群可以利用多个计算机进行并行计算从而获得很高的计算速度,也可以用多个计算机做备份,从而使得任何一个机器坏了整个系统还是能正常运行。
服务器负载均衡:
负载均衡
(Load
Balancing)
建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
分布式服务器:
所谓分布式资源共享服务器就是指数据和程序可以不位于一个服务器上,而是分散到多个服务器,以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型服务器形式。分布式有利于任务在整个计算机系统上进行分配与优化,克服了传统集中式系统会导致中心主机资源紧张与响应瓶颈的缺陷,解决了网络GIS
中存在的数据异构、数据共享、运算复杂等问题,是地理信息系统技术的一大进步。
这个三种架构都是常见的服务器架构,集群的主要是IT公司在做,可以保障重要数据安全;负载均衡主要是为了分担访问量,避免临时的网络堵塞,主要用于电子商务类型的网站;分布式服务器主要是解决跨区域,多个单个节点达到高速访问的目前,一般是类似CDN的用途的话,会采用分布式服务器。
纯手工打字,希望可以帮的到你!
您好,很高兴为您解答。1:MapReduce(MR),最为general和流行的一个分布式计算框架,其开源实现Hadoop已经得到了极为广泛的运用(Facebook,Yahoo!等等),同时在Hadoop基础上发展起来的项目也有很多(Hive是发展最好的),另外像Cloudera,Hortonworks,MapR这样的在Hadoop基础上发展起来的公司也有很多。2:Pregel,和MR一样也是Google发明的,其优势是在完成一些适合于抽象为图算法的应用的计算时可以更为高效,Giraph可以算是一个比较好的发展中的开源实现。3:Storm,Twitter的项目,号称Hadoop的实时计算平台,对于一些需要realtimeperformance的job可以拥有比MR更高的效率。4:Spark,UCBerkeleyAMPLab的项目,其很好地利用了JVM中的heap,对于中间计算结果可以有更好的缓存支持,因此其在performance上要比MR高出很多。Shark是其基础上类似于Hive的一个项目。5:Dryad和Scope,都是MR(MicrosoftResearch)的项目,从paper上来看Dryad是一个更为generalpurpose的计算框架,在vertices里实现计算,通过channels实现communication,两者组成一个graphworkflow;而Scope有点类似于Hive和Shark,都是将某种类似于SQL的scriptlanguage编译成可以在底层分布式平台上计算的job。但是这两个项目因为不开源,所以资料不多,也没有开源项目那样的community。当然还有其他很多,比如Google的Dremel,Yale的HadoopDB(现在已经商业化叫做Hadapt)。如若满意,请点击右侧采纳答案,如若还有问题,请点击追问希望我的回答对您有所帮助,望采纳!~O(∩_∩)O~
0条评论