scala的SQL数据库框架怎么用比较好
以下是Twitter所使用的开源项目,简要浏览之后,我觉得是一个很好的关于分布式架构,大数据,异步网络传输(客户端,服务端)学习的list,做个备份,以便后用。
1 分析和搜索服务
Twitter的搜索服务每天支持超过10亿次的查询,其背后的开源项目包括:
Apache Cassandra:一套分布式NoSQL数据库系统,以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型,是一个网络社交云计算方面理想的数据库。该项目最初由Facebook开发,于2008开源并捐赠给Apache基金会。
Apache Hadoop:由Apache基金会所开发的分布式系统基础架构,可使应用程序充分利用集群的威力高速运算和存储,用户可以在不了解分布式底层细节的情况下,开发分布式程序。
Apache Lucene:一个全文检索引擎工具包,目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
Apache Pig:一个基于Hadoop的大规模数据分析平台,它提供的类SQL语言称为Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口。
2 服务器和存储
Twitter需要将每天用户发送的推文存储到数据库,并推送给其他相关的用户。该过程用到的开源项目包括:
Linux:主要用于Twitter服务器。
Memcached:主要用于Twitter的缓存基础设施,作用是加速动态Web应用程序,减轻数据库负载。
Mysql:流行的开源关系型数据库,被Twitter大量用于存储Twitter消息。
Nodejs:一套用来编写高性能网络服务器的JavaScript工具包,在Twitter中用于队列处理(接收推文并写入数据库),使服务器能处理每个连接而不会阻塞通道。
3 Twitter工程师的工具箱
Apache Subversion:开源的版本控制系统
Git:一个分布式的版本控制系统
Eclipse:大名鼎鼎的Java IDE。
Gerrit:一个基于Web的代码评审和项目管理的工具,主要面向基于Git版本控制系统的项目
Jenkins:一个持续集成引擎,主要用于持续、自动地构建/测试软件项目,以及监控一些定时执行的任务
RSpec:一个BDD 测试工具
4 Twitter背后的编程语言和框架
OpenJDK:Java的开源版本。Twitter陆续将一些项目从Rails迁移到了Java。
Python:一种高效的动态解释型Web编程语言。
Ruby和Ruby on Rails:Twitter最初主要由Ruby和Rails开发。
Scala:Twitter使用的主要应用编程语言之一,很多Twitter的基础架构都是用Scala编写。
Clojure:Clojure是一种运行在Java平台上的Lisp方言,在任何具备Java虚拟机的地方,都可以利用Lisp的强大功能。Twitter的大数据处理系统Storm就是基于Clojure。
Drupal:使用PHP语言编写的开源内容管理框架(CMF),由内容管理系统(CMS)和PHP开发框架共同构成。Twitter的开发者社区基于Drupal构建。
Sinatra:一个轻量、快速的Ruby开发框架。
5 Twitter的前端解决方案
jQuery:全球使用最广泛的JavaScript框架。
Less:一个使用广泛的CSS预处理器,通过简单的语法和变量对CSS进行扩展,可减少很多CSS的代码量。
MooTools:一个简洁、模块化、面向对象的开源JavaScript框架,为开发者提供了一个跨浏览器的JS解决方案
Zeptojs:一个轻量级的Javascript框架,主要用于移动开发
6 Twitter服务开发框架
TwistedMatrix:一个Python 框架,用来开发非阻塞异步的网络服务和应用程序。
Netty:一个异步的、事件驱动的Web应用框架和工具,用于快速开发高性能、高可靠性的网络服务器和客户端程序。Netty目前作为Twitter的核心队列Kestrel的通信模块。
Apache Thrift:一个由Facebook开源的远程服务调用框架,采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中创建高效的、无缝的服务。
Important remarks: Thrift 这篇文章对Thrift做了综合性的介绍,值得我思考的是这篇文章:“Thrift与其他框架的比较”,以前对于分布式系统中的服务开发框架,我一直在想为什么不用rest或者webservice来进行通讯?而主流的却是选择RPC? 文章用图表来展示了Thrift在网络传输性能上与rest-jason,xml的优势。所以,是不是可以这样理解:Thrift从协议的定义上就使用了高效压缩数据格式TCompactProtocol(就算不用压缩,只用TBinaryProtocol 二进制流的数据格式,其传输性能也高于jason和xml),从而避免了传输,序列化jason或者xml 造成的代价。
Twitter公司所开源的项目
Twitter从开源社区中获得了大量的好处,而Twitter也在不断地回馈社区,开源了大量基础设施和工具,使得其他企业和开发者不必重新发明轮子,在这些开源项目的基础上更加快速地实现自己所需。
1 大数据处理
scalding:一个用于Cascading的Scala API。Cascading是一个构建于Hadoop上的API,用来创建复杂和容错数据处理工作流,它抽象了集群拓扑结构和配置,允许开发者快速开发复杂分布式的应用,而不用考虑背后的MapReduce。
summingbird:允许开发者以类似于本地Scala或Java的方式编写MapReduce程序,并在大部分著名的分布式MapReduce平台(包括Storm和Scalding)中执行它们。
2 前端项目
Bootstrap:一个用于前端开发的工具包,包含了基本的CSS、HTML组件,包括排版、表单、按钮、表格、网格、导航等。
TwUI:针对Mac平台的、支持硬件加速的UI框架,受到了UIKit的启发。
typeaheadjs:一个快速、全功能的自动完成库
hoganjs:一个Mustache模板语言的编译器
3 后端服务
Twitter Mysql:Twitter的MySQL分支
Parquet:一种Twitter内部供Hadoop使用的列式存储格式,为Hadoop生态系统中的所有项目提供支持高效率压缩的列式数据表达,而且与数据处理框架、数据模型或编程语言无关。
Finagle:一个允许开发者使用Java、Scala或其他JVM语言来构建异步RPC服务器和客户端的库,主要用于Twitter的后端服务。
iago:一个负载生成器,用来在产品正式发布前做流量负载测试。
twemproxy:一个快速、轻量级的memcached和redis代理服务器
zipkin:一个分布式的跟踪系统。在Twitter中用于收集各个服务上的监控数据,并提供查询接口。
4 Twitter基础设施通用库
commons:Twitter的Python、JVM公共库
util:Twitter的一些可重用的代码库
cassovary:一个基于JVM的简单的大图形处理库
将客户端程序调用的函数名和参数传递给协议层(TProtocol),协议层将函数名和参数按照协议格式进行封装,然后封装的结果交给下层的传输层。
此处需要注意:
要与Thrift服务器程序所使用的协议类型一样,否则Thrift服务器程序便无法在其协议层进行数据解析!
南和文档完备上高出一个档次。
protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的 XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,可以很方便的对其基于二进制的协议进行扩展,并且很方便的能让新版本的协议兼容老的版本。如果说xml太臃肿,json易解析,比xml更高效,易扩展,那么protobuf可以说,相对于json更高效,更易扩展,而且协议的保密性更强。并且protobuf是跨语言的,可以支持c(c++),Java,Python等主流语言,非常方便大系统的设计。protobuf号称也有service,可以基于其service的接口和回调,来完成客户端和服务器的逻辑。但是,目前版本service还仅仅停留在接口层,其底层的通讯,还需要自己实现,这点确实远不如thrift完备。
protobuf + netty ?
你指的是sa账号吧。在SQL Server 中系统管理员 (sa) 是为向后兼容性提供了特殊的登录。默认情况下,它分配给 sysadmin 固定服务器角色,并不能改变。虽然 sa 是内置的管理员登录,不要使用它经常。而在此基础上,使系统管理员的 sysadmin 固定的
谁能用最通俗的语言解释一下“感觉”和“知觉”,举个生活中的例子。
感觉应该指情感上的例如一个人喜欢另一个人这种感觉,知觉应该是生理上的感觉,五感一类。例如一个人昏迷了没有知觉了。
谁能用通俗的语言解释一下什么是 RPC 框架RPC 即为远程过程调用。最简单的说法,你打电话给饭店订了一桌酒菜,就是一个远程的过程调用。饭店对外发布了一个订酒菜的接口(电话),你打个电话就是调用的过程。你本身是不具备准备酒菜的功能的,但是你通过饭店的电话接口完成了这件事。这就是简单的远程过程调用
Thrift 是由 Facebook 开源的一个 RPC 框架,现在已经挂在 apache 下了。主要的几个好处:
1 支持非常多语言,包括在 WEB 开发中很常用的 PHP,以及最重要的 C++/Python/Java 等 WEB后端常用语言,当然,还包括很 cool 的 Ruby、Erlang。
2 完整的 RPC 框架实现,用脚本生成通讯相关的框架代码,开发者只需要集中精力处理好 业务逻辑。比如搭建一个 Hello World Service 只需要几分钟。
3拥有被 Facebook、Lastfm 等不少大规模互联网应用验证过的性能和可用性。
Hessian是一款基于HTTP协议的RPC框架,采用的是二进制RPC协议,非常轻量级 ,且速度较快。
当然,还有Hetty,它是一款构建于Netty和Hessian基础上的高性能的RPC框架。
Thrift 是由 Facebook 开源的一个 RPC 框架,现在已经挂在 apache 下了。
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。
早期单机时代,一台电脑上运行多个进程,大家各干各的,老死不相往来。假如A进程需要一个画图的功能,B进程也需要一个画图的功能,程序员就必须为两个进程都写一个画图的功能。这不是整人么?于是就出现了IPC(Inter-process munication,单机中运行的进程之间的相互通信)。OK,现在A既然有了画图的功能,B就调用A进程上的画图功能好了,程序员终于可以偷下懒了。
到了网络时代,大家的电脑都连起来了。以前程序只能调用自己电脑上的进程,能不能调用其他机器上的进程呢?于是就程序员就把IPC扩展到网络上,这就是RPC(远程过程调用)了。现在不仅单机上的进程可以相互通信,多机器中的进程也可以相互通信了。
要知道实现RPC很麻烦呀,什么多线程、什么Socket、什么I/O,都是让咱们普通程序员很头疼的事情。于是就有牛人开发出RPC框架(比如,CORBA、RMI、Web Services、RESTful Web Services等等)。
OK,现在可以定义RPC框架的概念了。简单点讲,RPC框架就是可以让程序员来调用远程进程上的代码一套工具。有了RPC框架,咱程序员就轻松很多了,终于可以逃离多线程、Socket、I/O的苦海了。
至于最近Java中流行的Netty,没玩过。但是大致了解过,Netty、Mina是游戏行业做服务器开发的Java程序员用的比较多的PRC框架(我们学生主要是Java方向的,有不少人毕业后从事游戏开发)。据说互联网公司用的也比较多。这两行业都有高并发量的、长连接、分布式、异步通讯、大数据量等特点。Netty这种RPC框架封装和优化了Java NIO和异步网络编程的一些繁琐的细节,一方面可以让开发者专注于业务逻辑的实现,一方面只需要调用Netty封装的API就可以很快编写出高性能的服务器。
用最通俗的语言来解释一下《相对论》相对论是一种哲学思想,认为世界(包括宇宙空间)的一切都是相对的,没有绝对的。
比如高相对于矮说才有意义,没有矮就没有高的概念。
长与短是互依互存的,没有短也不存在长。没有大就没有小,没有快就无所谓慢。一切事物失去了对比就失去了意义。正所谓尺有所短寸有所长。单独一个长度数值是没有长短概念的。
在物理学中,相对论物理学是区别于经典物理学的绝对概念的当代物理的一大支柱。是经典物理学向大空间高速度领域的延伸。
经典物理学虽然也承认相对性,但是并不排斥绝对概念,比如速度,经典物理认为宇宙中一定在在一个绝对静止的物质(以太),并且相对以太运动的速度就是绝对速度。而相对论物理学则认为宇宙中不存在绝对静止的物质,一切运动以及一切运动规律都是相对的。
相对论物理学的基础是一系列的物理实验结论:
1、一切物理规律在任何惯性系上都是等效的。(伽利略变换)
2、在一个封闭的空间内,无法测量系统自身的运动速度。(没有其他参照系就不存在速度的概念)
3、光速在任何惯性系上的速度相同。(光速不变)
光速不变是人们对相对论产生质疑的重要原因之一,因为光速不变与人们习惯的速度叠加原理相悖。然而这正是相对性原理在相对论物理学中最重要的体现。
所以提到相对论就不得不重点解释一下光速不变原理。
由于光速不变与人们的日常经验相差太远,所以很难让人接受。甚至很多人在描述相对论现象时还会站在绝对速度的立场上。比如“当一个物体以很高的速度运动时,时间会变慢”。
①、没有参照物就不存在速度,很高的速度从何而来呢?
②、如果有参照系,那么是参照系在运动还是那个物体在运动?谁的时间变慢?
③、参照系可以随意指定,随便换个参照系,它的时间就会跟着变吗?那么时间该如何变?
比如我们以太阳为参照系,地球有一个时间、以银河中心为参照系,地球又有一个时间,那我们用哪个时间?事实上我们可以选择无数的参照系,那地球的时间不是就没意义了?
显然上面的说法本身就站不住脚。
由于没有绝对速度,设想一下:
假如宇宙中没有任何其他天体,只有一个质点。这个质点如何确定自己是在运动还是静止?如何确定自己的运动速度?在经典物理学中人们会想到以太,但是相对论物理学中认为没有其他参照系的情况下速度没意义。而事实上在这个质点上测量光速也是各向同速度。
假如宇宙中只有两个天体,没有任何其他天体了,这两个天体互相可能会有相对运动,但是,无法区别这两个天体是相向运动还是同向运动,或者是同时沿某个夹角向其他方向运动。这两个天体唯独可以确定的是它们之间的距离是在远离还是接近,以及远离或接近的速度。
每个天体完全可以无视另一个天体的存在(认为自己是静止的,或任意的速度在宇宙中漂浮),在本系统上测量到的光速同样是各向同速的。因为自身的速度不存在必然的值(可以随意指定),所以光速也不存在与自身的运动速度叠加的任何依据。
也就是说:在任何惯性系上看到的光速都是c,恒定不变。相对的说就是在光看来,所有的惯性系都是“静止”的。事实上,麦-莫实验也验证了光速不与任何相对速度叠加。
因此,光速不变就成了划分相对论物理学和经典物理学(运算法则)的一个分水岭。而相对论的根本是相对论哲学思想在物理学中的具体体现。
狭义相对论:
狭义相对论是基于光速不变原理,对两个相对匀速直线运动的系统之间的时间与空间测量的换算关系的理论。可以看作是相对论的微分形式。
狭义相对论中不涉及力与系统的作用问题,只是相对速度对相互观测的影响以及换算关系。
从前面讨论的内容可以看出,光速不变是光的特征之一,就像光以直线传播一样。
我们举个非常常见的例子,说明光对观测的影响。
因为光是直线传播,因此产生了“近大远小”的现象,即我们看到越远的东西就会越小。假如我们的眼睛和大脑自动计算的功能让我们感觉近大远小不明显,我们可以借助相机来拍照,远的物体确实变小了。如果要知道远处的物体的真实大小和尺寸,我们必须用测量(拍照)到的尺寸乘上一个大于1的因子才能还原真实尺寸。
同样的,由于光速不变,当相对速度很高时,从一个系统上看另一个系统上的时间会“变慢”,这里其实是一个习惯说法,其实不是“变慢”而是变快。比如我们看(测量)到的时间是t,就需要乘上一个小于1的因子来还原真实的时间t'。t'=t√(1-V²/C²),只要速度不是0,√(1-V²/C²)就一定小于1,因此表示实际在那个系统上看到的时间比我们观测到的它的时间要慢,说明我们看到的时间要快于那个系统的时间。
但是我们平时还是习惯说,相对我们高速运动的物体上的时间会变慢,这只是习惯的说法,并不影响我们正确的使用变换公式来分析时间关系。因为本来速度和时间就是相对的,我们认为我们的时间没变,那说它的时间变慢了也不算什么错误。
广义相对论:
广义相对论把相对论理论引入到了力学领域,力对速度的影响(改变运动状态)也具有相对性。而对于一切系统(不仅仅是惯性系),一切物理规律依然正确,所以就有了F=ma在相对论范围内的正确性。
F=ma;即a=F/m :左边是加速度,右边是什么呢?单位质量所受的引力,这就是引力场的引力强度。就是说加速度与引力是等价的。
那么光线是直线传播的,在强大的引力场中发生了弯曲,说明空间发生了弯曲。在光看来,它走的依然是直线。
质能公式:
F=ma;两边同时乘上一个距离就是能量(或功)。F×距离=m×V²
即能量=质量乘速度的平方,可是这里的速度是什么?显然不可能是任意指定 的参照系下测量到的任意速度,而是质量体相对光的速度,那就是C。
因此,质能公式的表达式就是:E=mc²
哪位能用最通俗的语言解释一下Homogeneous coordinates是嘛意思齐次坐标(Homogeneous coordinates)让我们能够在投影空间里进行图像和几何处理,齐次坐标用 N + 1个分量来描述 N 维坐标。比如,2D 齐次坐标是在笛卡尔坐标(X, Y)的基础上增加一个新分量 w,变成(x, y, w),其中笛卡尔坐标系中的大X,Y 与齐次坐标中的小x,y有如下对应关系:
X = x/w
Y = y/w
笛卡尔坐标中的点 (1, 2) 在齐次坐标中就是 (1, 2, 1) 。如果这点移动到无限远(∞,∞)处,在齐次坐标中就是 (1, 2, 0) ,这样我们就避免了用没意义的"∞" 来描述无限远处的点。
谁能用通俗的语言或者举例子,给我解释一下‘贴现’的意思啊?谢谢啊倒贴现金呗
三台服务器,每个regionserver的请求都有上千?
将thrift的最大线程数再调大,thrift的内存调大看看,ulimit参数调大
hbase-envsh
export HBASE_THRIFT_OPTS="-Xmx1g -Xms1g -Xmn512m"
这里设的是1g,可以根据情况调大
什么是微服务?
微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
微服务的概念源于2014年3月Martin Fowler所写的文章“Microservices” martinfowlercom/articles/mi…
单体架构(Monolithic Architecture )
企业级的应用一般都会面临各种各样的业务需求,而常见的方式是把大量功能堆积到同一个单体架构中去。比如:常见的ERP、CRM等系统都以单体架构的方式运行,同时由于提供了大量的业务功能,随着功能的升级,整个研发、发布、定位问题,扩展,升级这样一个“怪物”系统会变得越来越困难。
这种架构模式就是把应用整体打包部署,具体的样式依赖本身应用采用的语言,如果采用java语言,自然你会打包成war包,部署在Tomcat或者Jetty这样的应用服务器上,如果你使用spring boot还可以打包成jar包部署。其他还有Rails和Nodejs应用以目录层次的形式打包
上图:单体架构
大部分企业通过SOA来解决上述问题,SOA的思路是把应用中相近的功能聚合到一起,以服务的形式提供出去。因此基于SOA架构的应用可以理解为一批服务的组合。SOA带来的问题是,引入了大量的服务、消息格式定义和规范。
多数情况下,SOA的服务直接相互独立,但是部署在同一个运行环境中(类似于一个Tomcat实例下,运行了很多web应用)。和单体架构类似,随着业务功能的增多SOA的服务会变得越来越复杂,本质上看没有因为使用SOA而变的更好。图1,是一个包含多种服务的在线零售网站,所有的服务部署在一个运行环境中,是一个典型的单体架构。
单体架构的应用一般有以下特点:
微服务架构(Microservices Architecture)
微服务架构的核心思想是,一个应用是由多个小的、相互独立的、微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖。不同服务通过一些轻量级交互机制来通信,例如 RPC、HTTP 等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护。简单的来说,一个系统的不同模块转变成不同的服务!而且服务可以使用不同的技术加以实现!
上图:微服务架构
微服务设计
那我们在微服务中应该怎样设计呢。以下是微服务的设计指南:
微服务消息
在单体架构中,不同功能之间通信通过方法调用,或者跨语言通信。SOA降低了这种语言直接的耦合度,采用基于SOAP协议的web服务。这种web服务的功能和消息体定义都十分复杂,微服务需要更轻量的机制。
同步消息 REST
同步消息就是客户端需要保持等待,直到服务器返回应答。REST是微服务中默认的同步消息方式,它提供了基于HTTP协议和资源API风格的简单消息格式,多数微服务都采用这种方式(每个功能代表了一个资源和对应的操作)
异步消息 – AMQP, STOMP, MQTT
异步消息就是客户端不需要一直等待服务应答,有应到后会得到通知。某些微服务需要用到异步消息,一般采用AMQP, STOMP, MQTT 这三种通讯协议
消息格式 – JSON, XML, Thrift, ProtoBuf, Avro
消息格式是微服务中另外一个很重要的因素。SOA的web服务一般采用文本消息,基于复杂的消息格式(SOAP)和消息定义(xsd)。微服务采用简单的文本协议JSON和XML,基于HTTP的资源API风格。如果需要二进制,通过用到Thrift, ProtoBuf, Avro。
服务约定 – 定义接口 – Swagger, RAML, Thrift IDL
如果把功能实现为服务,并发布,需要定义一套约定。单体架构中,SOA采用WSDL,WSDL过于复杂并且和SOAP紧耦合,不适合微服务。
REST设计的微服务,通常采用Swagger和RAML定义约定。
对于不是基于REST设计的微服务,比如Thrift,通常采用IDL(Interface Definition Languages),比如Thrift IDL。
微服务集成 (服务间通信)
大部分微服务基于RPC、HTTP、JSON这样的标准协议,集成不同标准和格式变的不再重要。另外一个选择是采用轻量级的消息总线或者网关,有路由功能,没有复杂的业务逻辑。下面就介绍几种常见的架构方式。
点对点方式
点对点方式中,服务之间直接用。每个微服务都开放REST API,并且调用其它微服务的接口。
上图:通过点对点方式通信
很明显,在比较简单的微服务应用场景下,这种方式还可行,随着应用复杂度的提升,会变得越来越不可维护。这点有些类似SOA的ESB,尽量不采用点对点的集成方式。
API-网关方式
API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能个。通常,网关也是提供REST/HTTP的访问API。服务端通过API-GW注册和管理服务。
上图:通过API-网关暴露微服务
所有的业务接口通过API网关暴露,是所有客户端接口的唯一入口。微服务之间的通信也通过API网关。\
采用网关方式有如下优势:
目前,API网关方式应该是微服务架构中应用最广泛的设计模式。
消息代理方式
微服务也可以集成在异步的场景下,通过队列和订阅主题,实现消息的发布和订阅。一个微服务可以是消息的发布者,把消息通过异步的方式发送到队列或者订阅主题下。作为消费者的微服务可以从队列或者主题共获取消息。通过消息中间件把服务之间的直接调用解耦。
上图:异步通信方式
通常异步的生产者/消费者模式,通过AMQP, STOMP, MQTT 等异步消息通讯协议规范。
数据的去中心化
单体架构中,不同功能的服务模块都把数据存储在某个中心数据库中。
每个微服务有自己私有的数据库,其它微服务不能直接访问。单体架构,用一个数据库存储所有数据
微服务方式,多个服务之间的设计相互独立,数据也应该相互独立(比如,某个微服务的数据库结构定义方式改变,可能会中断其它服务)。因此,每个微服务都应该有自己的数据库。
每个微服务有自己私有的数据库,其它微服务不能直接访问。每个微服务有自己私有的数据库,其它微服务不能直接访问。
数据去中心话的核心要点:
数据的去中心化,进一步降低了微服务之间的耦合度,不同服务可以采用不同的数据库技术(SQL、NoSQL等)。在复杂的业务场景下,如果包含多个微服务,通常在客户端或者中间层(网关)处理。
微服务架构的优点:
微服务架构的缺点:
微服务的一些想法在实践上是好的,但当整体实现时也会呈现出其复杂性。
关于微服务架构的取舍
0条评论