Heroku的架构

news/2024/7/7 11:35:05 标签: asynchronous, erlang, 服务器, freebsd, 扩展, solaris

很早之前在Infoq上看到Heroku的介绍,不过当时这个网站并没有推出,今天在整理收藏夹的时候发现,Heroku已经推出一段时间,而且现在作为云计算平台已经有很快的发展了。

Heroku是Rails应用最简单的部署平台。只是简单的把代码放进去,然后启动、运行,没人会做不到这些。Heroku会处理一切,从版本控制到 自动伸缩的协作(基于Amazon的EC2之上)。我们提供一整套工具来开发和管理应用,不管是通过Web接口还是新的扩展API。

HeroKu的架构大部分是采用开源的架构来实现的,:)其实构建云计算平台,开源的世界已经解决一切了,不是吗?下面看看HeroKu的架构图,非常漂亮:

Heroku架构图

一、反向代理服务器采用Nigix

Nigix是一个开源的,高性能的web server和支持IMAP/POP3代理的反向代理服务器,Nigix不采用多线程的方式来支持大并发处理,而是采用了一个可扩展的Event-Driven(信号asynchronous)的网络模型来实现,解决了著名的C10K问题。

Nigix在这里用来解决Http Level的问题,包括SSL的处理,Http请求中转,Gzip的传输压缩等等处理,同时应用了多个前端的Nigix 服务器来解决DNS及负载均衡的问题。

二、Http Cache采用Varnish

Varnish is a state-of-the-art, high-performance HTTP accelerator. It uses the advanced features in Linux 2.6, FreeBSD 6/7 and Solaris 10 to achieve its high performance.

Varnish在这里主要给采用来处理静态资源,包括对页面的静态化处理,图片,CSS等等,这里请求获取不到的再通过下一层的Routing Mess去获取。通常还有另外一个选择Squid,不过近几年来,Varnish 给大型网站应用的更加的多了。

三、动态路由处理层,这里采用了Erlang 实现的,是由该团队自己实现的,Erlang 提供了高可靠性和稳定性的服务端实现能力(其实,我们也可以这样去使用),这个层主要是解决路由寻址的问题,通过合理分配动态过来的请求,跟踪请求的负载能力,并合理的分配可获取的下一层app 服务。这个层实现了对业务app的可扩展性和容错性,可以根据下一层服务的负载容量来合理进行路由的选择。原理上它是一个分布式的动态HTTP请求的路由池子。

四、动态网格层,用户部署的app是部署在这一层,可以看成是一个服务器集群,只是粒度会更加的细小。

五、数据库层,这里不用多说了

六、Memory Cache

也不需要多说,现在大部分互联网公司都在应用,而且基于它开发了很多好的连接器,我们公司其实也有在采用,不过我们还有自己开发的分布式内存系统,如原来的TTC Server,现在好像叫WorkBench。


http://www.niftyadmin.cn/n/1737968.html

相关文章

深度学习中训练集,验证集,测试集的学习心得

这段时间在做一个实验,但是由于数据集较小,所以我就只分了训练集和验证集(相当于把测试集当成验证集用了),由于没有真正意义上的测试集,所以做完实验之后开始怀疑自己,这样做真的对吗&#xff1…

[转]Javascript的变量与delete操作符

Javascript的变量 实际上Javascript中,变量 对象属性,这是因为 Javascript 在执行脚本之前会创建一个Global对象,所有的全局变量都是这个Global对象的属性,执行函数时也会创建一个Activation对象,所有的局部变量都是这…

使用 GNU profiler 来提高代码运行速度

原文链接:http://www.ibm.com/developerworks/cn/linux/l-gnuprof.html 使用 GNU profiler 来提高代码运行速度寻找应用程序中占用时间最长的部分 Martyn Honeyford (martynhuk.ibm.com), 软件工程师, IBM UK Labs 2006 年 5 月 08 日 改进应用程序的性能是一项非常耗时…

tensorflow2.0在call()方法中使用tf.reshape()方法报错

记录一下自己在tensorflow2.x的call()方法中,打算改变张量的形状,所以使用了: x tf.reshape(x,(batch_size,-1)) 这样的代码,发生报错。 原因是在构建动态图的时候tensorflow2.0内部还没有创建具体的变…

What is ESI?

The ESI(Edge Side Includes) language is conceptually similar in many ways to the Server Side Includes (SSI) function found in many web servers. It is an in-markup scripting language that is interpreted before the page is served to the client.

tf.saved_model.load()出错

有时我们保存tensorflow2.x模型时,采用了tensorflow的统一模型保存格式, tf.saved_model.save(model, "保存的目标文件夹名称") 当我们通过 model tf.saved_model.load("保存的目标文件夹名称") 加载该模型时,调用出…

HTML的color

The attribute value type "color" (%Color;) refers to color definitions as specified in [SRGB]. (颜色的定义) A color value may either be a hexadecimal number (prefixed by a hash mark-#) or one of the following sixteen col…

AI算法岗面试问题记录1

记录一下面试算法岗过程中问到的问题,部分想不起了。 1.交叉熵是怎么回事?公式是什么? 在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即 由于KL散度中的前一部分−H(y)不变&…