`

实际技术选型的考虑因素

阅读更多

最近在工作中我需要把数据从公共的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。

实际技术选型的考虑因素

以下摘选自《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,优秀的程序员可以说出二者各自的好处是什么,也许对于大型项目至关重要;但是也有程序员会吐槽,其实用哪个都可以啊,好处坏处的差异并没有那么明显,因为我的项目那么小,需要的数据库读写如此简单……

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

你觉得是不是这样呢?

文章系本人原创,转载请保持完整性并注明出自《四火的唠叨》

0
0
分享到:
评论

相关推荐

    深度学习技术选型白皮书.pdf

    文档围绕深度学习的训练框架、推断框架和技术生态工具集三大方面进行了系统梳理和总结,并结合企业实际需求,提出了选型考虑因素和指标体系。同时,白皮书对目前存在的问题进行了分析,并展望了技术发展趋势。以下是...

    示波器选型考虑十大因素.doc

    "示波器选型考虑十大因素" 作为一个电子工程师,每天都要依赖示波器,因此选择适当的示波器来满足您的需求是一项重要任务。比较不同制造商生产的示波器的技术指标和功能可能是一件耗时耗力的工作。本文将为您甄选出...

    开源技术选型手册

    因此,《开源技术选型手册》强调了在选择开源技术时需要考虑的因素,如技术成熟度、社区活跃度、技术支持等,这些都是确保技术长期稳定和支持的关键因素。 #### 三、开源技术的分类与特点 该手册涵盖了多种开源...

    大数据平台技术框架选型分析

    大数据平台技术框架选型分析是一个复杂的过程,需要综合考虑到多种因素。只有选择合适的技术框架,才能满足大数据平台的需求,提高大数据平台的整体性能和效率。 在大数据平台技术框架选型分析中,需要了解到多种...

    05_知其然而知其所以然:如何进行消息队列的技术选型?.zip

    文件“笔记.docx”可能包含了作者对MQ技术选型的详细笔记,包括对比各种MQ的优缺点、实际应用案例以及选型的思考过程。而“PPT.pptx”可能是一个演示文稿,通过图表和实例进一步阐述了MQ技术的关键点和选型策略。 ...

    企业物流技术选型.doc

    企业物流技术选型是决定企业物流效率和服务质量的关键因素。物流中心的配套技术选型涉及多个层面,包括业务适应性、货品特性、管理要求、产能、物流运作指标以及成本效益。企业在选择物流技术时,必须全面考虑这些...

    技术架构选型报告方案

    技术架构选型报告方案是一个指导性文件,它帮助项目团队或企业决策者了解在构建系统时如何选择合适的...了解这些知识点可以帮助IT专业人员或企业决策者更好地理解技术选型的重要性和影响,从而做出更加合适的技术决策。

    技术选型-DorisDB Vs ClickHouse Vs GreenPlum.pdf

    综合来看,在进行OLAP技术选型时,应考虑各种因素,包括数据库的性能、稳定性、易用性、成本以及社区和企业支持等因素。DorisDB作为一个新兴的数据库系统,在某些方面已经表现出强劲的实力,随着持续的技术更新和...

    企业物流技术选型(DOC 8).doc

    构建现代化的企业物流体系,高效且合理的物流技术选型无疑是至关重要的一步。这一过程不仅影响着企业的日常运营效率,更是决定着企业能否在激烈的市场竞争中保持优势的关键因素之一。物流技术选型涉及广泛,包括物流...

    服务化框架技术选型实践.pptx

    在考虑因素中,包括代码规范、通讯协议、序列化协议、IO模型、负载均衡、学习成本、跨语言需求、可扩展性和性能。例如,Thrift使用IDL生成代码,RESTful基于JAX-RS规范,gRPC则使用 Proto 文件生成代码。 服务注册...

    云平台技术选型之八:容器

    在实际应用中,选择容器技术不仅需要考虑技术的成熟度和社区支持,还应该综合考虑业务需求、安全性、管理复杂度以及成本等因素。企业应该对市面上的开源容器方案进行充分的调研和评估,以便做出最适合自身需求的选型...

    深度学习技术选型白皮书(2018 年)1

    在深度学习技术选型时,企业需要考虑多个因素,如框架的性能、易用性、社区支持、生态系统、兼容性以及对特定硬件的优化。此外,白皮书还提供了一些成功案例,展示了不同框架在实际业务中的应用,这些案例有助于企业...

    用电信息采集系统建设及技术选型浅析.docx

    在技术选型方面,稳定性和可靠性是远程通信技术选择的两大核心考虑因素。目前,光纤通信、230MHz无线专网和无线公网是三种主要的远程通信技术。光纤通信虽然初始投资成本较高,但其稳定性和可靠性非常值得信赖,适合...

    分布式定时任务调度系统技术选型指南.docx

    在实际选型时,还需要考虑以下几点: - **可扩展性**:系统是否能够随着业务的增长轻松地添加新的节点。 - **容错性**:系统如何处理节点故障,能否自动恢复任务执行。 - **监控与管理**:是否有完善的监控和管理...

    高并发系统解决方案与分布式技术选型探讨.pdf

    分布式技术选型不仅仅包含选择合适的服务框架,还应考虑网络通信机制、数据一致性保障、故障转移机制和分布式事务管理等关键问题。 例如,分布式服务框架中的Spring Cloud不仅能够帮助我们快速构建分布式系统,还能...

    无源晶振选型的注意因素

    ### 无源晶振选型的关键考虑因素 无源晶振作为电子设备中不可或缺的元件之一,在各种电子产品中发挥着至关重要的作用。正确地选择无源晶振对于保证产品的性能和稳定性至关重要。本文将深入探讨无源晶振选型手册中的...

    大数据技术组件选型对比.pdf

    大数据技术组件选型是当前大数据领域中的重要议题,涉及到如何高效、稳定地处理海量数据。在对比各种组件时,我们需要考虑其性能、...理解这些组件的优缺点,并结合实际场景进行合理选型,是构建高效大数据平台的关键。

    NTC热敏电阻-温度传感器技术选型指南

    ### NTC热敏电阻-温度传感器技术选型指南 #### 一、概述 NTC热敏电阻是一种基于半导体材料制成的温度传感器,其电阻值随着温度的升高而迅速减小,这种特性使得NTC热敏电阻成为了一种非常实用且广泛应用的温度检测...

Global site tag (gtag.js) - Google Analytics