程序员人生 网站导航

专访赵桂华:.NET也有春天及高性能网站架构实践

栏目:互联网时间:2014-09-24 18:07:05

在本次专访之前,笔者一直都对.NET这个平台有所偏见,或者说是看不到.NET的优势,对Java Web、PHP、Ruby等更加看好,而之后SSH、RoR、LAMP等的流行也让笔者对这个观点更加坚信。然而在浏览完赵桂华的个人Blog后,笔者逐渐认识到对.NET这种不公平的看待,或许正如赵桂华所说,打造高性能网站架构是一个系统的工程,并非某个平台或某种语言能完成,所以高性能通常与编程语言无关。同时,.NET被看轻的一部分原因还来自Visual Studio开发环境的强大。


博主赵桂华:2005年毕业于武汉工程大学电子信息工程专业。大学期间就对软件产生浓厚的兴趣,利用课余时间自学了计算机专业全部专业课程以及VB、VC、Java、数字图像处理等编程语言和技术。毕业后一直从事.NET相关技术的研究与开发工作,先后就职于多家软件以及互联网公司,拥有丰富的软件开发和项目管理经验。致力于高性能网站架构、提高软件开发质量与效率等领域的研究。个人为推动开源事业贡献着自己的力量,目前已在Github上开源了一套轻量级数据持久层组件 restful.data,该组件能支持多种数据库和Linq查询,具有高性能、零配置、代码优雅、易上手等特性。


免费订阅“CSDN云计算”微信公众号,实时掌握第一手云中消息!

CSDN作为国内最专业的云计算服务平台,提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、Hadoop、Spark、机器学习、智能算法等相关云计算观点,云计算技术,云计算平台,云计算实践,云计算产业资讯等服务。


以下为采访实录

CSDN:能否介绍一下目前您正在从事哪方面研究及工作内容?

赵桂华:我是个自由职业者,有更多的时间来思考产品或项目之外的东西,目前我主要在做下面几件事情:

1. 高性能网站架构,主要研究一些开源的缓存、消息队列、代理组件和其他一些工具。

2. 规范开发流程,改善代码质量,提高开发效率。

3. 基于社区针对小范围人群的O2O电子商务服务平台。

4. restful.data开源数据持久层组件的持续更新与优化。

CSDN:.NET给大家留下的印象多半是易于上手,对于高性能打造上您怎么看?在这个方面,对比J2EE、Ruby、PHP等如何?

赵桂华:.NET之所以易于上手,是因为微软为开发者提供了非常强大的开发工具,你几乎可以在Visual Studio上搞定一切。但对于.NET本身而言,它也是个强大的开发平台,其他语言能做的,.NET也能做,它们不能做的,.NET也可以做。不管是从易用性,还是程序执行效率上都是非常卓越的。.NET给人的印象只是容易上手,原因主要是,搭载.NET的运行环境软硬件成本高,导致很多互联网平台从最初的.NET转向别的开发语言,很多人都只是使用.NET来开发企业内部应用,而他们对性能的要求并不是那么高,只是运用了一些简单的常见技术,就能完成项目的要求,很难展现.NET平台的那些优秀特性,所以给人一种.NET只能走低端路线的印象。

打造高性能网站架构是一个系统的工程,并非某个平台或某种语言能完成,所以高性能通常与编程语言无关。Mono框架的出现,也为.NET跨平台带来了转机,微软也在积极的推动这个项目的发展,所以在打造高性能网站架构的工具和手段上,.NET作为一个开发平台并不是一个人在战斗,我们完全可以把Java的那一套照搬到.NET上。真要说哪个平台更好,我倒觉得不能盖棺定论,每种语言和平台都有其自身的特点和优势,我们更多的是要考虑怎么将他们整合,让他们更好的为我们服务。当然,由于一些历史原因,J2EE、PHP等可能在开源方面做的更好一些。

CSDN:对于高性能网站打造,你们每个部分通常使用了哪些开源组件?

赵桂华:

  • 数据缓存方面,可选用Redis和Memcached来构建集群,降低数据库服务器的压力
  • 消息队列在某些场景下是非常有用的,如秒杀,抢购等,可以使用Redis、RabbitMQ等开源组件
  • 当某些数据库或者数据表数据量非常大的时候,可以对他们进行水平和垂直切割,需要用到数据库代理,如MySQL Proxy,Amoeba,Cobar等
  • 负载均衡也有很多成熟的方案,如lvs,Nginx,搭配KeepAlive以确保在发生单点故障时能自动切换

CSDN:您认为目前高性能网站架构的难点在哪里?需要避免哪些坑?顺便分享一些高性能网站打造的经验?

赵桂华:第一点,真实场景不易模拟和重现,我们很难在开发阶段发现架构的问题和不足,不便于我们测试。

第二点,可选的组件和工具很多,这需要我们非常熟悉组件和工具的特性,而研究这些东西又是非常花费时间和精力的。

第三点,理想和现实的碰撞,没有一个完美的架构,架构是要结合实际情况的,还需要考虑投入的成本,而成本也有可能制约架构的性能。

第四点,牛顿定律只适用于低速运行的物体,常规的思维方式和开发习惯可能在高并发大数据的网站上不适合了,所以放弃一些传统的设计理念也是摆在我们面前的一个重大难题。

设计高性能网站架构,首先跳过过度设计这个坑,要结合实际情况,考虑投入的成本和人力资源,选择合适的方式,搭建合适的架构;技术不是完美的,不要指望技术能帮你解决所有的问题,要在行与不行之间做出更好的抉择,不要一开始就进行假设,为了实现一个毫无意义的目标而投入过多的精力。对于打造高性能网站架构,我也只能算是个初学者,但其中心思想主要有四点:

  • 将压力分散到不同的角色
  • 将任务分配给多个参与者
  • 尽可能让靠前的角色承受更多的压力
  • 保证其可靠性和稳定性

具体到一些技术,请关注我的博客,我会持续的更新。

CSDN:作为缓存服务器,Memcached已在LAMP等环境中得到了验证,那么与之对比,Redis又有什么优势?

赵桂华:我们可以从下面几个方面来比较这两者之间的区别:

  • 风格:Memcached只是个简单的Key-Value存储系统,它没有备份和持久化的功能,而Redis更像是一个NoSQL数据库系统。
  • 功能:Redis提供了一些Memcached没有的功能,它支持的数据类型更加丰富,支持事务,支持master-slave,支持集群。
  • 数据一致性:在多线程环境下,Memcached在这一点上要比Redis做的好,但也带来了性能上的损耗。
  • 内存管理:Memcached的内存利用率要比Redis高。
  • 性能:因为Memcached只是简单的存储Key-Value,在缓存数据很大时,性能要优于Redis,但在单核应用上存储小于100K的数据时,Redis性能要比Memcached高。
  • 网络IO:由于Redis支持更多的数据结构,所以能有效的减少网络IO的次数和数据体积,而 Memcached在存储复杂数据时稍显逊色。

所以,我们无法单纯的得出谁优谁劣的结论,各有利弊,需要根据不同的应用场景来选择它们,如果只是单纯缓存一些数据,可以选择Memcached,比如session数据,如果我们希望数据能被持久化,那无疑只能选择Redis,例如统计当前的访问量、在线用户数等。

CSDN:您是restful.data开源轻量级数据库持久层组件的创始人,您怎么看待开源这个运动?如何才能更好的参与进一个开源项目?

赵桂华:古人云,授人与鱼不如授人与渔,我认为开源更像是一种慈善行为,与其授予金钱和物资,还不如给他们提供一些的富有创造力的工具,让他们可以利用这些工具创造出更多更好的软件和工具来丰富我们的生活,这也是一种社会价值的体现。我们在使用开源的同时,也要学会为开源奉献自己应有的力量,更重要的是要尊重那些默默为我们做出贡献的人们。

想要参与一个开源项目,首先自身应该对开源是感兴趣的,你需要有足够的动力来驱动你参与这个项目,还需要抛弃一些世俗的观念,你可以怀揣着梦想来做这件事情,但你不能指望开源能为你带来名和利。你还需要保证有足够的时间和精力来参与其中,以确保项目能如期进行。持之以恒的毅力也是不可或缺的,坚持不懈的深入研究,才能让项目达到预期的目标。

CSDN:restful.data开源项目当下有多少人参与?您开发这个项目的初衷是什么?目标是什么?

赵桂华:目前我创建的项目群已将近50人,主动参与的人并不多,我希望有更多的人能参与进来。

之所以把这个项目开源出来,是因为这个项目是我多年以来一直思考的结果,我希望分享给大家,让更多的人学习和参与,并提出更多有建设性的意见和建议,共同推进项目的发展。另一个原因是我不想让我的成果变成某个企业独享的东西,我希望有更多的人使用它,完善它。

我对restful.data并没有设定什么目标,只想让开发者们在ORM框架上能有更多的选择,让更多的人认识它,了解它,学习它。

CSDN:在restful.data开发过程中,您有什么收获?

赵桂华:当你设定一个目标,认真的去完成它的时候,当你遇到一个又一个的山峰,你又不得不去翻越它的时候,你会发现,你收获的不仅仅是短暂的喜悦,更多的是人生的感悟,你会明白,没有困难是不可逾越的,你只需要一步一步的坚持前行,当你站在另一个山头

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐