`

实际技术选型的考虑因素

 
阅读更多

近在工作中我需要把数据从公共的Data Warehouse(数据仓库)导出来,放到属于我们team自己账号的云端存储资源中去,然后再在我们的应用中查询这样的资源。需要导出数据是因为直接 从Data Warehouse查询数据是一个缓慢而且异步的过程,而我们的应用数据查询需要实时性。现在要解决这个问题有一些AWS的服务可供我们可以选择,基本上 分成了两大类:

第一类是存储和内容分发(Storage & Content Delivery):

  • CloudFront:CloudFront是用于内容分发给不同地区用户的,它在全球设有数个“edge”,作为临近网络访问数据的入口。就如同大网站建立的CDN设备一样。这显然不是我需要的。
  • Glacier:Glacier非常用来适合存储不常用的、压缩的和备份的海量文件数据,在集中文件存储的服务中,它是最便宜的。比如存储日志、备案资料等等。当然,它牺牲了数据传输的性能和一致性。显然它也不适合我的场景。
  • S3:S3(Simple Storage Service)适合存储原始数据、大对象(单个上限5Tb),费用比数据库服务低。如果我最终决定使用文件系统来存储数据,它是一个好的选择。另外,无 论是Glacier还是S3,层级概念上最大的以及都是地区级别的(在Glacier里面叫做vault,在S3里面叫做bucket,每个这样的单元都 位于某一个地区,例如Asin Pacific),因此如果需要全球多个节点访问同一份数据,需要额外把数据分发到各个地区去。
  • Storage Gateway:Storage Gateway是用于集成IT环境的内部部署的,它支持基于网关缓存的优化或者是网关存储的优化,便于本地和临近网络快速获取数据。它可以用于公司内部不同地理位置的文件共享、镜像或者备份,也不适合我这里的场景。

选择文件存储不能提供数据库的条件查询等功能,目前我的场景下并不需要,我只需要根据不同的区域和数据唯一键来获取数据集就可以了,否则,我需要考虑数据库服务:

  • DynamoDB:DynamoDB 是挂在云上的NoSQL数据库服务,每一张表都需要指定一个hash的主键或者是hash加range两层的主键,同时,它的数据读取和存储的最小单位是 4KB,也就是说,存取0.5KB和4KB的数据,性能表现是几乎一样的。从数据量来看,如果选择数据库服务,它是最适合解决我的问题。
  • SimpleDB: 和DynamoDB相似,非关系型数据库,结构可随意变换,而且数据自动索引,所以查询是非常快的。它的数据容量小得多,有一个典型用法是使用 SimpleDB来存储S3的文件地址,就像“指针”一样。但是它的容量限制需要考虑,每个domain只有10G的上限,可以建立多个domain,但 是那样就需要应用自己来路由选择domain了。关于一致性,它和DynamoDB一样,可以选择最终一致性和强一致性,当然,强一致性需要花费更多钱, 还会降低吞吐量。
  • ElastiCache:把Memcached或者Redis搬到了云上,这显然不是我需要的。
  • RDS:RDS(Relational Database Service)相当于把关系型数据库搬到了云上,它和DynamoDB或者SimpleDB的区别,主要就是RDB和NoSQL DB的区别。
  • RedShift:RedShift是一个数据仓库服务,利用列式存储技术及节点间并行分布式查询,对于上P的数据访问做了优化。

在这里还可以找到这几个AWS上数据库服务的不同,用一表以蔽之:

If You Need Consider Using  
A relational database service with minimal administration Amazon RDS, a fully managed service that offers a choice of MySQL, Oracle or SQL Server database engines, scale compute & storage, Multi-AZ availability and more.  
A fast, highly scalable NoSQL database service Amazon DynamoDB, a fully managed service that offers extremely fast performance, seamless scalability and reliability, low cost and more.  
A NoSQL database service for smaller datasets Amazon SimpleDB, a fully managed service that provides a schemaless database, reliability and more.  
A relational database you can manage on your own Your choice of relational AMIs on Amazon EC2 and EBS that provide scale compute & storage, complete control over instances, and more.  

再有另一个技术选型的例子,在web容器中选择Tomcat还是Jetty。Jetty结构简单,容易定制其组件,也就是说,小和简单(这也是当初Google选择它作为app引擎的最重要原因), 是它最大的优势。Jetty在同时处理大量连接并且需要长时间保持这些连接的时候,性能上更有优势,因为它是基于NIO,而不是Tomcat的BIO来处 理请求的;但是我们也能找到很多性能测试的数据,在对于连接生命周期非常短而且非常频繁的请求,Tomcat的性能要优于Jetty。

620131028105220

以下摘选自《Jetty VS Tomcat Performance Comparison》的二者比较:

Jetty Features and Powered:

  • Full-featured and standards-based.
  • Embeddable and Asynchronous.
  • Open source and commercially usable.
  • Dual licensed under Apache and Eclipse.
  • Flexible and extensible, Enterprise scalable.
  • Strong Tools, Application, Devices and Cloud computing supported.
  • Low maintenance cost.
  • Small and Efficient.

Tomcat Features and Powered:

  • Famous open source under Apache.
  • Easier to embed Tomcat in your applications, e.g. in JBoss.
  • Implements the Servlet 3.0, JSP 2.2 and JSP-EL 2.2 support.
  • Strong and widely commercially usable and use.
  • Easy integrated with other application such as Spring.
  • Flexible and extensible, Enterprise scalable.
  • Faster JSP parsing.
  • Stable.

 

在选择实现技术的时候经常会遇到这样或那样的选择题,上面的两个例子,都是相对理性地分析和比较的例子。我们考虑的内容往往包括功能、性能、社区支持、扩展性和定制性、已知问题和约束等等。

但是,具有讽刺意味的是,仔细想想,实际上我们选择某一项技术的最重要的原因,却远远不是那些“理智的分析”,而是下面这些:

  • “因为大家都在用它啊”,比如项目用Java或者C++作为主要语言来实现,我想很多人和我一样,经常并没有经过太多思考,这似乎是一个思维惯性。
  • “因为我没有用过这项技术,我感兴趣,我想学一下”,其实这也无可厚非,我以前也经历过一个项目组,大部分人(包括主管在内),都排斥使用新技 术,原因是担心风险。我原则上认同风险一说,但是适度范围内给程序员选择技术的自由从长远看是有好处的,尤其是技术也是需要进步的。把所有问题都让“工程 商人”来解决,只会让目光过于浅近。
  • “因为我只知道它啊”,这种情况更多。你为什么选择C3P0连接池?因为那时候我不知道还有哪些别的数据库连接池……

工程师总会在技术选型的时候寻找某种平衡,纸面上未必会写这三条理由,但是心里面,有意识无意识地,一定会给向着这三条理由倾斜。

现在让我们退一步,倘若我们都非常理性地评估了类似技术的优缺点,但是在真正使用技术实现的时候,却发现,实际上这几条类似的技术都可以实现,选哪 个关系并不大。因为数据规模、问题大小,都不足以到了非得区分类似技术优劣的地步。举例来说,持久层使用MyBatis还是Hibernate,优秀的程 序员可以说出二者各自的好处是什么,也许对于大型项目至关重要;但是也有程序员会吐槽,其实用哪个都可以啊,好处坏处的差异并没有那么明显,因为我的项目 那么小,需要的数据库读写如此简单……

有人说,小项目可以帮助拓宽技术视野,但是只做小项目无法深入了解技术本身,因为你无从比较并理解类似技术的优劣。这也是“玩具代码”在学新东西的时候有成就感,也很适合技术分享的胶片之用,却无法带来工程师持续成长的原因。

你觉得是不是这样呢?

【stz总结:把握广度很深度的平衡。大项目做一个,深入理解某项技术+小项目多多扩展视野】

原文链接:http://www.raychase.net/1638

分享到:
评论

相关推荐

    华为电子器件选型规范-保险丝选型规范.doc

    本规范介绍了保险丝的技术参数,根据参数进行选型的方法,以及根据我司保险丝应用的现状,在实际选择中需要注意的问题,用以支持正确选型。 1.3 关键词 保险丝 过流保护 选型 2 规范性引用文件 无 3 术语和定义 ...

    双 金 属 温 度 计的选型

    在选用双金属温度计时要充分考虑实际应用环境和要求,如表盘直径、精度等级、安装固定方式、被测介质种类及环境危险性等。除此之外,还要重视性价比和维护工作量等因素。此外,双金属温度计在运输、安装、使用过程中...

    基于springboot企业固定资产管理系统后端程序

    设计企业固定资产管理系统的后端程序...以上仅是企业资产管理系统后端程序设计的一些方面,实际设计应根据具体需求、技术选型等因素进行全面考虑。如果有具体的设计问题需要探讨,请随时告诉我,我会尽力为您提供帮助。

    城市园林数字化项目投资概算清单.docx

    请注意,这只是一个简化的投资概算清单示例,实际投资清单会根据项目的具体需求、规模、技术选型等因素进行详细编制。在制定投资概算清单时,建议与专业团队或顾问合作,以确保投资的准确性和合理性。同时,还需要...

    邱剑-美团大数据的云之道.zip

    特别地,作者结合美团的实际案例,分享了公司在迁移到云平台过程中面临的挑战,以及采取的策略和技术选型。此外,文档还重点讨论了大数据安全性、隐私保护以及如何通过机器学习算法挖掘数据价值等问题。作者提供了一...

    校园网分析和设计

    本文进而对校园的网络进行了划分,设计出了相应的总体拓扑图,并根据拓扑图中的设计,综合考虑了性能,需求,价格等因素进行了相应的网络设备的选型设计。在本文的设计方案中主要考虑了校园网的布线、安全、设备、...

    银行设计方案(1).doc

    2.2、经济性与实用性 充分考虑用户实际需要和信息技术发展趋势,根据用户现场环境,设计选用功能和适合 现场情况、符合用户要求的系统配置方案,通过严密、有机的组合,实现最佳的性能价 格比,以便节约工程投资,...

    银行设计方案.doc

    2.2、经济性与实用性 充分考虑用户实际需要和信息技术发展趋势,根据用户现场环境,设计选用功能和适合 现场情况、符合用户要求的系统配置方案,通过严密、有机的组合,实现最佳的性能价 格比,以便节约工程投资,...

    无线网络覆盖设计方案.doc

    7 1.2.4 影响无线局域网性能的因素 7 1.2.5 无线局域网络的安全性 8 1.3 覆盖考虑 9 1.4 无线链路计算 9 2 智能小区无线网络覆盖背景介绍 10 2.1 无线网络实施目的 10 2.2 无线网络需求分析 11 2.2.1 应用需求 11 ...

    单位组网实施方案设计.docx

    论 iii 第二章 系统设计原则和需求分析 iv 系统需求分析 iv 系统设计原则 v 第三章 系统设计总述 vii 可扩充性和易维护性 vii 开放性 vii 采用Intranet技术 vii 第四章 单位网络规划及建设 xiv 主干网网络技术选型:...

    楼宇对讲系统产品设计方案.doc

    5、先进性、兼容性、可扩展性 楼宇对讲系统设计应充分考虑系统的先进性,保证系统的功能、性能满足小区安全保障 的实际需求;应充分考虑系统的兼容性,以保证安全防范系统设备之间能够得到很好的 搭配,提高系统...

    继电器在高压开关中的应用

    其在运行中也有其独特的特殊性,选型的好坏, 直接关系到变电站设备的可靠安全运行, 万一发生事故将特别严重, 因此要做到合理选择,正确应用,就必须充分研究分析系统的实际应用条件与实际技术参数的要求,...

    电源技术中的为手持产品选择电源管理方案

    这些产品中不可能安装风扇,也不可能容忍较高的温度,如果这些问题得不到解决,对元件尺寸的苛刻要求很难使其达到适当的效率,同时,小型电池需要严格的电源管理,上述因素都是当电源集成在系统内部时所要考虑的。...

    视频监控设计方案.doc

    要求视频监控系统设计时应遵循技术先进、 功能齐全、性能稳定、节约成本的原则,综合考虑维护及操作因素,并将为今后的发展 、扩建、改造等因素留有扩充的余地。本系统设计内容是系统的、完整的、全面的;设 计方案...

    方案设计依据.doc

    本系统通过在各个需要监控的地方设置的摄象机采集到清晰的图象信号,摄象机的 选用要遵循技术指标和美观相结合的原则,根据所处的不同地点的光线、距离等因素选 用合适的镜头,枪机外加防护罩。设置一个监控中心,...

    厂区网络设计的方案.doc

    录 第1章 网络需求分析 3 1.1 需求分析 3 1.2 建设目标 3 第2章 组网方案规划设计 5 2.1 建设原则 5 2.2 层次化设计 6 2.3 高可靠性 6 2.4 网络总体规划 7 第3章 安全管理安全渗透网络设计 9 3.1 网络完全实际办法 ...

    系统设计方案.doc

    在设备选型方面,保证软、硬件的可靠性,必须考虑采用成熟 的技术和产品。在设备选型和系统设计的各个方面都尽量减少故障的发生。 (2) 方便管理和维护 系统涉及面广,需要对系统进行实时控制和管理。在不改变系统...

    高清卡口设计方案.doc

    在系统软硬件上的设计和选型上,我们充分考虑其可扩展性,系统结构易于扩充,以 适应今后可能出现的更大任务负载。硬件平台具有可升级性,当需要时可以增加新 的计算机设备同原有计算机设备一起工作以提高系统的...

    网络安全解决方案.pptx

    网络安全策略设计依据 在制定网络安全策略时应当充分考虑如下因素: 对于内部用户和外部用户分别提供哪些服务程序; 初始投资额和后续投资额(新的硬件、软件及工作人员); 方便程度和服务效率; 复杂程度和安全...

    计算机网络系统设计方案.docx

    (9)充分考虑性价比 作为系统集成商,我们一贯的原则是在尽可能节省用户投资的前提下,提供最优的集成方案书和产品选型,本方案充分考虑到这一点。 (10)完善的本地支持服务 构建一个系统最重要的还要考虑到系统...

Global site tag (gtag.js) - Google Analytics