您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
专访赵桂华:.Net也有春天及高性能网站架构实践
 
作者 仲浩 火龙果软件 发布于:2014-06-11
 

随着业务需求的发展,网站交互性的要求也越来越高,因此,高性能网站架构也成为开发者不得不面对的难题。近日,笔者联系到了linli8博主赵桂华,就这一方面的话题进行了探讨。

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

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

以下为采访实录

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开发过程中,您有什么收获?

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

CSDN:谈谈restful.data,亮点、特性、功能等。

赵桂华:restful.data之所以是一个轻量级的持久层框架,一开始就不想把它弄的太复杂,更多考虑的是它的性能、易用性和优雅性。

首先,它的查询效率是非常高的,我本机测试单表查询10万笔记录并全部转换为实体对象,只用了0.4秒。

其次,它很容易上手,整个框架并没有提供过多华而不实的API,你完全可以通过函数名就能猜测它的功能,使用它你不需要任何配置。

再则,它的代码风格非常优雅,符合大多数人的审美观。

restful.data提供了基本的SQL语句增删改查功能和分页查询功能,支持事务处理,支持存储过程调用,你完全可以一行代码搞定这些事情。

restful.data对linq的支持,也是其一大亮点,目前只支持单表查询,也不打算让它支持联合查询,但我觉得已经足够。

restful.data对增删改操作也提供了优雅的实现,你可以使用lambda表达式来实现批量更新和删除,这也是其他ORM框架所不具备的特性。

   
次浏览       
相关文章

企业架构、TOGAF与ArchiMate概览
架构师之路-如何做好业务建模?
大型网站电商网站架构案例和技术架构的示例
完整的Archimate视点指南(包括示例)
相关文档

数据中台技术架构方法论与实践
适用ArchiMate、EA 和 iSpace进行企业架构建模
Zachman企业架构框架简介
企业架构让SOA落地
相关课程

云平台与微服务架构设计
中台战略、中台建设与数字商业
亿级用户高并发、高可用系统架构
高可用分布式架构设计与实践

专家视角看IT与架构
软件架构设计
面向服务体系架构和业务组件
人人网移动开发架构
架构腐化之谜
谈平台即服务PaaS


面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践


锐安科技 软件架构设计方法
成都 嵌入式软件架构设计
上海汽车 嵌入式软件架构设计
北京 软件架构设计
上海 软件架构设计案例与实践
北京 架构设计方法案例与实践
深圳 架构设计方法案例与实践
嵌入式软件架构设计—高级实践
更多...