
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据系统的应用在许多软件开发项目中都是非常常见的一个功能应用,而今天我们就通过案例分析来了解一下,软件开发数据系统架构需要满足哪些条件。
目标与意义
现今很多应⽤程序都是数据密集型(data-intensive)的,⽽⾮计算密集型(compute-intensive)的。因此CPU很少成为这类应⽤的瓶颈,更⼤的问题通常来⾃数据量、数据复杂性、以及数据的变更速度。
数据密集型应⽤通常由标准组件构建⽽成,标准组件提供了很多通⽤的功能;例如,许多应⽤程序都需要:
存储数据,以便⾃⼰或其他应⽤程序之后能再次找到((数据库(database)));
记住开销昂贵操作的结果,加快读取速度(缓存(cache));
允许⽤户按关键字搜索数据,或以各种⽅式对数据进⾏过滤(搜索索引(searchindexes));
向其他进程发送消息,进⾏异步处理(流处理(streamprocessing));
定期处理累积的⼤批量数据(批处理(batchprocessing));
如果这些功能听上去平淡⽆奇,那是因为这些数据系统(datasystem)是⾮常成功的抽象:我们⼀直不假思索地使⽤它们并习以为常。绝⼤多数⼯程师不会幻想从零开始编写存储引擎,因为在开发应⽤时,数据库已经是⾜够完美的⼯具了。
但现实没有这么简单。不同的应⽤有着不同的需求,因⽽数据库系统也是百花⻬放,有着各式各样的特性。实现缓存有很多种⼿段,创建搜索索引也有好⼏种⽅法,诸如此类。因此在开发应⽤前,我们依然有必要先弄清楚适合⼿头⼯作的⼯具和⽅法。⽽且当单个⼯具解决不了你的问题时,组合使⽤这些⼯具可能还是有些难度的。
本部分将从我们所要实现的基础⽬标开始:可靠、可扩展、可维护的数据系统,以及探讨考量这些⽬标的⽅法。
可靠性(Reliability)
可靠性意味着即使发⽣故障,系统也能正常⼯作。故障可能发⽣在硬件(通常是随机的和不相关的),软件(通常是系统性的Bug,很难处理),和⼈类(不可避免地时不时出错)。容错技术可以对终端⽤户隐藏某些类型的故障。
容错
造成错误的原因叫做故障(fault),能预料并应对故障的系统特性可称为容错(faulttolerant)或韧性(resilient)。
“容错”⼀词可能会产⽣误导,因为它暗示着系统可以容忍所有可能的错误,但在实际中这是不可能的时,只有谈论特定类型的错误才有意义。
注意,故障(fault)不同于失效(failure)。故障通常定义为系统的⼀部分状态偏离其标准,⽽失效则是系统作为⼀个整体停⽌向⽤户提供服务。故障的概率不可能降到零,因此好设计容错机制以防因故障⽽导致失效。而我们的目的就是要利⽤不可靠的部件构建可靠系统的技术。
可扩展性(Scalability)
可扩展性意味着即使在负载增加(数据量、流量、复杂性)的情况下也有保持性能的策略。为了讨论可扩展性,我们⾸先需要定量描述负载和性能的⽅法。
描述负载
负载可以⽤⼀些称为负载参数(loadparameters)的数字来描述。参数的佳选择取决于系统架构,它可能是每秒向Web服务器发出的请求、数据库中的读写⽐率、聊天室中同时活跃的⽤户数量、缓存命中率或其他东⻄。
除此之外,也许平均情况对你很重要,也许你的瓶颈是少数极端场景。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。