delphi 分布式架构怎么学
李维还有一本《Delphi6/Kylix2 SOAP/Web Service程序设计篇》,如果想用Delphi写Web Service那值得看看。Midas,soap这些都是Delphi开发分布式比较“正统”的方法,此外还有STAT,RemObjects(个人觉得不错)等第三方的框架,不过第三方的资料比较少
http://hi.baidu.com/qweruioppo/blog/item/05e6ef1f25c7c2c0a78669da.html
由于分布式系统所涉及到的领域众多,知识庞杂,很多新人在最初往往找不到头绪,不知道从何处下手来一步步学习分布式架构。
本文试图通过一个最简单的、常用的分布式系统,来阐述分布式系统中的一些基本问题。
负载均衡
分布式缓存
分布式文件系统/CDN
分布式RPC
分布式数据库/Nosql
分布式消息中间件
分布式session问题
-总结
下图为一个中大型网站/App的基本架构:
在这个架构中,涉及到以上所列的基本问题:
负载均衡
负载均衡是分布式系统中的一个最最基本的问题。在上图中:
网关需要把请求分发给不同的Tomcat;
Tomcat需要把收到的请求,分发给不同的Service;
这都需要负载均衡。一句话:凡是请求从一个入口进来,需要分发给后端不同的机器时,就需要负载均衡。
局域网负载均衡
在上图中,负载均衡发生在局域网内部。在这里,常用的网关软件有Nginx/HAProxy/F5/LVS/各种云上的SLB等。
广域网负载均衡
在上图之外,还有广域网负载均衡。这通常发生在域名服务器上,而不是局域网内部。
同1个域名,映射到不同的局域网集群。
负载均衡算法
常用的负载均衡算法:随机,轮询(Round Robin),最小资源数,hash。
分布式缓存
在上图中,当DB负载过高,我需要为Service机器加缓存时,就遇到一个基本问题:
如果使用local的内存做缓存,则其他Service机器就没办法共用此缓存。
因次,我需要一个可以让所有Service机器共享的缓存,这就是分布式缓存。
常用的分布式缓存组件:Memcached/Redis/Tair等
分布式文件系统
在上图中,当我要存储客户端上传的图片文件时,就会遇到另一个基本问题:我不能把图片存在每个Tomcat的本地文件系统里面,这样的话,其他机器就没办法访问了。我需要一个让所有机器可以共享的文件系统,这就是分布式文件系统。
常用的分布式文件系统:MogileFS/TFS/HDFS/Amazon S3/OpenStack Swift等
当使用了分布式文件系统,对外提供图片url访问服务时,就会遇到另一个基本问题:如果每次文件的访问,都要到分布式文件系统里面去取,效率和负载就可能成为问题。
为此,就需要引入CDN。
常用的CDN厂商,比如ChinCache。当然,现在的各种云存储,比如七牛云,阿里云,腾讯云,已经自带了CDN。
分布式RPC
分布式系统的一个基本问题就是:机器与机器之间如何通信? 我们都知道底层原理是TCP/IP,Socket。
但一般很少有人会去裸写Socket,实现机器之间的通信。这里,最常用的组件就是RPC。
最简单的实现RPC的方式就是使用http。当然,业界有很多成熟的开源RPC框架,如Facebook的Thrift, 阿里的Dubbo,点评的Pigeon。。
在RPC内部,一般都自己实现了负载均衡。还有更复杂的,如多版本,服务降级等。
补充一句:虽然底层原理都是Socket,但使用不同框架/组件时,通常都有其自己的跨机器通信方式,比如Mysql JDBC,RPC, 消息中间件等。
分布式数据库
在上图中,DB是单一节点。当访问量达到一定程度,就会涉及到Mysql的分库分表问题。
分库/分表之后,就会涉及到join的问题,分布式事务的问题。
关于分库分表,业界也早有成熟方案。对上层屏蔽分库分表,sql的执行,像是在单库一样。
还有像MongoDB这种Nosql数据库,天生是分布式的。但同样会面对Mysql分库分表所要面对的问题。
还有像阿里的OceanBase,有Mysql的强一致性保证,又是分布式的,还可以支持分布式事务。
分布式消息中间件
在上图中,没有提及到消息中间件。相对其他基本问题,这个需要一个更适合的业务场景来谈,在以后的章节中,会再详述。
常用的消息中间件,比如老一辈的ActiveMQ/RabbitMQ, 新一点的,阿里的RocketMQ,LinkedIn的Kafka等。
消息中间件的一个典型场景就是:通过最终一致性,解决上面的分布式事务问题。
分布式session问题
在传统的单机版应用中,我们经常使用session。而当单机扩展到多机,单机的session就没办法被其他机器所访问。
此时就需要使用分布式session,把session存放在一个所有Tomcat都可以访问的地方。
关于分布式session,业界早有成熟方案,在此不再详述。
总结
本文罗列了分布式系统的各种基本问题和业界常用的技术,希望建立起分布式系统的一个宏观图谱。
愈乐彤舒: 首先你要从基本语法学起,delphi的语法是基于pascal的,等你学好了基本语法后,在学习点数据结构等算法方面的知识.等有了这些前提,再来接触delphi你会感觉很容易上手.delphi实际就是基本的pascal语法+VCL库组成,VCL库为你制作软件提供了很多便捷的功能.在学习的过程中还有不断的熟悉delphi这个工具,只有对自己的工具有了很好的了解,你才能更加得心应手.此外如果是做windows编程就还需要学习windows api它是你和windows对话的基本接口.到这一步你基本就可以很快速而且高效的做出你想要的软件了.之后的学习就看你个人发展了.
曾都区18772545289: DELPHI难吗?如何学好delphi - ?
愈乐彤舒: 先学习一下Pascal语言的基础语法和关建字. 这个网上搜索或者买本入门书都可以. 然后可以认真学习Delphi的OOP编程. 可以看一下《Delphi高手突破》这本书. 充分理解了这本书的内容,你也算是一个Delphi熟手了.
曾都区18772545289: 怎么学好DELPHI??
愈乐彤舒: 1、学习语法.语法很关键,有本书叫做《Pascal 精要》,里面的内容讲的很好. 2、组件的使用.delphi有很多组件,可以加快编程的速度和减轻难度,有本《delphi组件参考大全》,里面的内容涵盖了组件板上的几乎所有组件,可以当做参考书使用. 3、多看实例.有本《Delphi编程实例与技巧》,多看实例里面的代码,研究一下搞明白它,学习别人的编程思路,试着自己动手做做,提高自己的编程水平. 最后,使用一些辅助的工具,加快编程效果,推荐:CnPack IDE 专家包、vclskin.
曾都区18772545289: 我是个编程爱好者现在想学delphi不知该从何学起?? - ?
愈乐彤舒: 如果你有编程基础就好办.先找一本基础书,网上找电子书也可以,对delphi的基础进行一些基本的了解,然后按教程上的例子做几个程序,这里关键不是求出与教程一样的结果,而是要充分理解命令语句的含义.有了这些基础后,可从网上下载一些原程序,在充分理解原程序的基础上试试按自己的想法修改.我想,经过这样的锻炼后,应该基本掌握delphi了.
曾都区18772545289: 如何学习 delphi - ?
愈乐彤舒: 终于有人问这个问题了!我虽然现在编程这里得分最多,但是很少有人问我最喜欢回答的问题.就凭你要学DELPHI,不给分我也好好回答!我是个DELPHI的忠实FANS.大学刚毕业.初中生可以学这个,这是肯定的.学习DELPHI,其实就是...
曾都区18772545289: 谁知道怎么最快的学会delphi - ?
愈乐彤舒: 我觉得学一样新事物,最重要的是要先入门..入门的话,方法可以因人而异.如果你认为你的自学能力够好,可以尝试买书来看看,我曾经就试过,不过效果不大,遇到问题也比较难解决,看不懂的时候也容易烦躁,很快就没兴趣了.第二种...
曾都区18772545289: delphi应该怎么学?从何学起? - ?
愈乐彤舒: 建议按照下面步骤吧.... 先声明下 delphi 在WIN32应用方面 MIS数据库方面,C/S多层,,很强大,,,呵呵...... 1: 先学 Pascal , Object Pascal. 只要学习pascal的语法就行,比如变量声明,各种操作符,关键字等. 不管那种语言的语句基本上都...
曾都区18772545289: 我想快速学习Delphi??
愈乐彤舒: 先学PASCAL语言(网上有电子书). 然后学基础的教程,如果您是在校学生的话会配一本delphi书给你,精读. 其次delphi入门到精通(外国人书籍). 最后看视频、案例、写程序调试直到成功为止.
曾都区18772545289: 如何才能又快又好的学好delphi? - ?
愈乐彤舒: 1.树立信心 delphi是个优秀的软件,而且发展前景广阔,无论是c/s或B/S,无论工程大小,都能用delphi写出非常优秀的应用软件.学习delphi,前景光明.2.端正态度 勤奋刻苦,持之以恒,不要三天打鱼二天晒网;深入浅出用心感悟,不可走马观...
曾都区18772545289: 怎样自学好Delphi,请高手指点 - ?
愈乐彤舒: 必须要记住delphi一些常用的内部函数和一些基本语法和数据类型,如inttostr, while, if, cardinal, dword, integer等,这样才能做到看到别人的代码.像这些基本的东西,可以下载或去书店看一些入门的书.能看别人的代码的时候,就要学会别人的编程思想, 代码为什么要那样写, 有没有更好的办法实现同样的功能? 这都是要自己去思考的,也只有这样,你才可以得到进步. delphi是面向对象(OOP)的语言, 学习它的同时, 还必须理解面向对象编程的思想和学习面向对象编程的方法.后面也就没什么了,基本上就是一些API的利用.实现各种各样的功能,这些都是通用的,不局限于编程语言.