201705系分下午真题
第 1 题
阅读以下关于基于微服务的系统开发的叙述,在答题纸上回答问题1至问题3。
【说明】某公司拟开发一个网络约车调度服务平台,实现基于互联网的出租车预约与管理。公司的系统分析师王工首先进行了需求分析,得到的系统需求列举如下:
系统的参与者包括乘客、出租车司机和平台管理员三类;
系统能够实现对乘客和出租车司机的信息注册与身份认证等功能,并对乘客的信用信息进行管理,对出租车司机的违章情况进行审核;
系统需要与后端的银行支付系统对接,完成支付信息审核、支付信息更新与在线支付等功能;
针对乘客发起的每一笔订单,系统需要实现订单发起、提交、跟踪、撤销、支付、完成等业务过程的处理:
系统需要以短信、微信和电子邮件多种方式分别为系统中的用户进行事件提醒。
在系统分析与设计阶段,公司经过内部讨论,一致认为该系统的需求定义明确,建议尝试采用新的微服务架构进行开发,并任命王工为项目技术负责人,负责项目开发过程中的技术指导工作。
【问题1】 (12 分)
请用 100字以内的文字说明一个微服务中应该包含的内容,并用 300 字以内的文字解释基于微服务的系统与传统的单体式系统相比的 2 个优势和带来的 2 个挑战。【问题2】 (8 分)
识别并设计微服务是系统开发过程中的一个重要步骤,请对题干需求进行分析,对微服务的种类和包含的业务功能进行归类,完成表 1-1 中的(1)~(4)。
表1-1 微服务名称及所包含业务功能
【问题3】(5分)
为了提高系统开发效率,公司的系统分析师王工设计了一个基于微服务的软件交付流程,其核心思想是将业务功能定义为任务,将完成某个业务功能时涉及到的步骤和过程定义为子任务,只有当所有的子任务都测试通过后改业务功能才能上线交付。请基于王工设计的在线支付微服务交付流程,从(a)~(f)中分别选出合适的内容填入图1-1中的(1)~(5)处。
图3-1 在线支付微服务交付流程
选项:(a)提交测试 (b)全量上线 (c) 对接借记卡
(d) 获取个人优惠券 (e)试部署 (f)对账
答案与解析
- 试题难度:一般
- 知识点:案例分析>系统分析
- 试题答案:【问题1】一个微服务中应该包含的内容有:资源、对资源的操作、API集合。
微服务的优势:
(1)解决了复杂性问题。它把庞大的单一模块应用分解为一系列的服务,同时保持总体功能不变。
(2)让每个服务能够独立开发,开发者能够自由选择可行的技术,让服务来决定API 约定。
(3)每个微服务都能独立配置,开发者不必协调对于本地服务配置上的变化,这种变化一旦测试完成就被配置了。
(4)让每个服务都可以独立调整,你可以给每个服务配置正好满足容量和可用性限制的实例数。
微服务架构带来的挑战:
(1)并非所有的系统都能转成微服务。例如一些数据库层的底层操作是不推荐服务化的。
(2)部署较以往架构更加复杂:系统由众多微服务搭建,每个微服务需要单独部署,从而增加部署的复杂度,容器技术能够解决这一问题。
(3)性能问题:由于微服务注重独立性,互相通信时只能通过标准接口,可能产生延迟或调用出错。例如一个服务需要访问另一个服务的数据,只能通过服务间接口来进行数据传输,如果是频繁访问,则可能带来较大的延迟。
(4)数据一致性问题:作为分布式部署的微服务,在保持数据一致性方面需要比传统架构更加困难。
【问题2】
(1)乘客信息注册、乘客身份认证、乘客信用信息管理
(2)出租车司机信息注册、出租车司机身份认证、司机违章情况审核
(3)支付管理
(4)订单发起、订单提交、订单跟踪、订单撤销
【问题3】
(1)(f) (2)(c) (3)(d) (4)(e) (5)(b) - 试题解析:微服务架构是一种新的软件体系设计模式,它并没有形成统一、严格的定义,但是基于其分布式环境应用的场景,却拥有一些共同的特征:比如开发敏捷性、持续交付、可伸缩性、最终一致性等。微服务架构建议将大型复杂的单体架构应用划分为一组微小的服务,每个微服务根据其负责的具体业务职责提炼为单一的业务功能;每个服务可以很容易地部署并发布到生产环境里隔离和独立的进程内部,它可以很容易地扩展和变更;对于一个具体的服务来说可以采用任何适用的语言和工具来快速实现;服务之间基于基础设施互相协同工作。
微服务的系统相比传统的单体式系统有一定的优势:
(1)解决了复杂性问题。它把庞大的单一模块应用分解为一系列的服务,同时保持总体功能不变。这个应用被分解为多个可管理的分支或服务,每一个服务都有良好定义的边界,以远程过程调用(RPC)驱动或信息驱动的API 的形式;微服务架构模式单一模块代码库,实际很难实现。因此,独立的服务开发速度明显更快,而且更易理解和维护。
(2)让每个服务能够独立开发,开发者能够自由选择可行的技术,让服务来决定API 约定。当然,大多数组织会通过限制技术选择来避免完全的失控。然而,这种自由意味着开发者们不用被迫使用从项目开始就存在的陈旧技术,他们可以选择使用当下的技术编写一个新的服务。另外,由于这些服务本身相对比较小,用新的技术来重写旧的服务也更可行一些。
(3)每个微服务都能独立配置,开发者不必协调对于本地服务配置上的变化,这种变化一旦测试完成就被配置了。举个例子,UI 团队可以执行A|B测试后立刻对UI 的变化执行迭代。微服务架构模式使不断地配置成为可能。
(4)让每个服务都可以独立调整,你可以给每个服务配置正好满足容量和可用性限制的实例数。另外,你也可以使用最适合服务的资源需求的硬件。举例说明,你可以在EC2 计算优化的实例上配置CPU 加强的图片处理服务,另外给EC2 存储优化的实例配置内存中的数据库服务。
微服务架构带来的挑战:
(1)并非所有的系统都能转成微服务。例如一些数据库层的底层操作是不推荐服务化的。
(2)部署较以往架构更加复杂:系统由众多微服务搭建,每个微服务需要单独部署,从而增加部署的复杂度,容器技术能够解决这一问题。
(3)性能问题:由于微服务注重独立性,互相通信时只能通过标准接口,可能产生延迟或调用出错。例如一个服务需要访问另一个服务的数据,只能通过服务间接口来进行数据传输,如果是频繁访问,则可能带来较大的延迟。
(4)数据一致性问题:作为分布式部署的微服务,在保持数据一致性方面需要比传统架构更加困难。
第 2 题
阅读以下关于系统数据分析与建模的叙述,在答题纸上回答问题 1至问题 3。
【说明】某软件公司受快递公司委托,拟开发一套快递业务综合管理系统,实现快递单和物流信息的综合管理。项目组在系统逻辑数据模型设计中,需要描述的快递单样式如图2-1所示,图 2-2 是项目组针对该快递单所设计的候选实体及其属性。
图2-2 候选实体及属性
【问题1】(6分)
数据库设计主要包括概念设计、逻辑设计和物理设计三个阶段,请用 200字以内文字说明这三个阶段的主要任务。【问题 2】(11分)
根据快递单样式图,请说明:
1)图 2-2中三个候选实体对应的主属性PK1、PK2和PK3分别是什么?
2)图 2-2 中应设计哪些实体之间的联系,并说明联系的类型。
【问题3】(8分)
在图2-2中添加实体之间的联系后,该实体联系图是否满足第一范式、第二范式和第三范式中的要求(对于每种范式判定时,假定已满足低级别范式要求)。如果不满足,请用 200 字以内文字分别说明其原因。
**答案与解析** - 试题难度:较难 - 知识点:案例分析>数据库方向 - 试题答案:
【问题1】
概念设计也称为概念结构设计,其任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽象为一个不依赖于任何DBMS的数据模型,即概念模型。概念模型的表现形式即ER模型。逻辑设计也称为逻辑结构设计,其主要任务是将概念设计阶段设计好的E-R图转换为与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构(如:关系模式)。
物理设计也称为物理结构设计,其任务是对给定的逻辑模型选取一个最适合应用环境的物理结构,所谓数据库的物理结构,主要是指数据库在物理设备上的存储结构和存取方法。
【问题2】
PK1:证件号
PK2:编号
PK3:证件号
联系1:寄件人与快递单之间应有联系,联系类型:1:N。
联系2:收件人与快递单之间应有联系,联系类型:1:N。
【问题3】
寄件人,收件人均满足第3范式,因为这两个关系均消除了部分函数依赖与传递函数依赖。(自然也就同时满足第1范式与第2范式)。
快递单满足第2范式,但不满足第3范式,快递单的主键为编号,编号确定:保价金额、代收货款、运费、加急费、包装费、保价费,而这一系列费用的组合确定总计。所以存在传递函数依赖。注:增加了寄件人证件号与收件人证件号到快递单中,并不会影响快递单满足第2范式。
- 试题解析:
【问题1】
概念设计也称为概念结构设计,其任务是在需求分析阶段产生的需求说明书的基础上,按照特定的方法将它们抽象为一个不依赖于任何DBMS的数据模型,即概念模型。概念模型的表现形式即ER模型。逻辑设计也称为逻辑结构设计,其主要任务是将概念设计阶段设计好的E-R图转换为与选用的具体机器上的DBMS所支持的数据模型相符合的逻辑结构(如:关系模式)。
物理设计也称为物理结构设计,其任务是对给定的逻辑模型选取一个最适合应用环境的物理结构,所谓数据库的物理结构,主要是指数据库在物理设备上的存储结构和存取方法。
【问题2】
寄件人实体中,证件号可以唯一标识元组,所以证件号是主键,自然证件号就是主属性。收件人主属性同理可得。
快递单中编号能唯一标识元素,所以编号是主键,编号也是主属性。
【问题3】
寄件人与收件人都比较好分析,字段少,关系明了。
快递单情况较为复杂,首先值得注意的是,总计属于派生属性,这自然带来不规范的情况。进一步分析,发现存在传递依赖,所以不属性第3范式。由于主键是单个属性的,所以部分依赖还是消除了。
### 第 3 题
阅读以下关于嵌入式多核程序设计技术的描述,回答问题 1至问题 3。
【说明】近年来,多核技术已被广泛应用于众多安全关键领域(如:航空航天等)的电子设备中,面向多核技术的并行程序设计方法已成为软件人员急需掌握的主要技能之一。某宇航公司长期从事宇航电子设备的研制工作,随着宇航装备能力需求的提升,急需采用多核技术以增强设备的运算能力、降低功耗与体积,快速实现设备的升级与换代。针对面向多核开发,王工认为多核技术是对用户程序透明的,开发应把重点放在多核硬件架构和硬件模块设计上面,而软件方面,仅仅需要选择一款支持多核处理器的操作系统即可。而李工认为,多核架构能够使现有的软件更高效地运行,构建一个完善的软件架构是非常必要的。提高多核的利用率不能仅靠操作系统,还要求软件开发人员在程序设计 中考虑多进程或者多线程并行处理的编程问题。
【问题1】(12分)
请用300字以内文字说明什么是多核技术和多线程技术,并回答李工的意见是否正确,为什么?【问题2】(6 分)
在多核环境下,线程的活动有并行和并发两种方式,请用300字以内的文字说明这两种方式的含义及差别。
【问题3】(7 分)
请根据自己所掌握的多核、多线程的知识,判别表 3-1给出的说法是否正确,并将答案写在答题纸上对应空白处(填写正确或错误)。
表3-1 关于多核和单核体系结构的说明
答案与解析
- 试题难度:较难
- 知识点:案例分析>嵌入式方向
- 试题答案:【问题1】多核是多微处理器核的简称,是将两个或更多的独立处理器封装在一起,集成在一个电路中。多核处理器是单枚芯片(也称为硅核),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器。通过在多个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。
多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
李工的意见是正确的。多核处理器虽然带来了强大的计算能力,但如果无法实现程序的并行,那么,大量计算资源将被闲置,造成巨大的浪费。所以在开发中,要注重多核编程技术,从并行计算、共享资源分布式计算、任务分解与调度、Lock-Free编程等方面充分考虑相关问题,以便将多核处理器的性能充分发挥出来。
【问题2】
如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统,即系统中同时有多个线程,可以认为是并发的情况。
如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。当系统中有多个线程,并在同一时刻有两个,或两个以上的线程在运行状态,可认为是并行系统。
问题3
(1)√ (2)√ (3)× (4)√ (5)× (6)× (7)√ - 试题解析:多核是多微处理器核的简称,是将两个或更多的独立处理器封装在一起,集成在一个电路中。多核处理器是单枚芯片(也称为硅核),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器。通过在多个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。多线程是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”,利用它编程的概念就叫作“多线程处理”。
如果某个系统支持两个或者多个动作(Action)同时存在,那么这个系统就是一个并发系统。如果某个系统支持两个或者多个动作同时执行,那么这个系统就是一个并行系统。
对此,有一种通俗的解读:
你吃饭吃到一半,电话来了,你一直到吃完了以后才去接,这就说明你不支持并发也不支持并行。
你吃饭吃到一半,电话来了,你停了下来接了电话,接完后继续吃饭,这说明你支持并发。
你吃饭吃到一半,电话来了,你一边打电话一边吃饭,这说明你支持并行。
多核编程技术主要包括并行计算、共享资源分布式计算、任务分解与调度、Lock-Free编程等内容。其中共享资源分布式计算、任务分解与调度是最重要的内容,也是大多数程序员未接触过的内容,许多并行算法都可以通过它们来实现。多核编程模式主要是提供一种多核并行与分布式编程的普遍方法,有了这些编程模式后,程序员不再需要去学习各种复杂的并行算法,它可以复用现有的串行算法,很容易地实现并行和分布式计算。在多核编程技术中,最重要的一点是如何将计算均匀分摊到各个CPU核上。
多核时代的到来,给程序员的编程思维带来了巨大的冲击和挑战。为了能够充分利用多核性能,程序员必须学会以分块的思维设计程序,以多进程或多线程的形式来编写程序。到底应该使用多进程还是多线程的形式来编写程序,是最让程序员感到困惑的问题之一,这些需要根据具体的应用来决定。在通常情况下,使用多线程进行多核编程比使用多进程有更大的优势,因为:
(1)线程的创建和切换开销比进程更小。
(2)线程之间通信的方式比较多,而且简单也更有效率。
(3)多线程有很多的基础库支持。
(4)多线程的程序比多进程的程序更容易理解和修改。
除了编程形式,使用多线程编程的动机也发生了改变。过去,Windows程序员使用多线程的主要原因之一是为了提高用户程序运行效率,例如,在长时间的计算中提高GUI、I/O或者网络的响应速度。而在多核时代编写应用程序为了充分利用多个计算核心,缩短计算时间,或者在相同的时间段内计算更多任务。例如,在进行游戏编程时,通过多线程的方式把碰撞检测的计算分散到多个CPU内核,就可以大大缩减计算时间,也可以利用多核做更细致的检测计算,从而能够模拟更加真实的碰撞。
处理器所能交换的最小存储单元就是一个cache行,或者一个cache块。两个独立的cache在需要读取同一cache行时,会共享该cache行。但如果在其中一个cache中,该cache行被写入,而在另一个cache中该cache行被读取,那么即使读写的地址不相交,也需要在这两个cache之间移动该cache行。就像两个人同时在写一本日志的两个不同部分,两人的写入动作相互独立,但是除非将日志撕成两半,否则这两个人必须来回地互相传递这本日志。同样地,两个硬件线程在写入一个cache的不同部分时,互相竞争cache,就像在进行乒乓球比赛。
第 4 题
阅读以下关于数据库分析与建模的叙述,在答题纸上回答问题1至问题 3。
【说明】
某电子商务企业随着业务不断发展,销售订单不断增加,每月订单超过了50万笔,急需开发一套新的互联网电子订单系统。同时该电商希望建立相应的数据中心,能够对订单数据进行分析挖掘,以便更好地服务用户。
王工负责订单系统的数据库设计与开发,初步设计的核心订单关系模式为:
orders(order_no,customer_no ,order_date,product_no,price,……);
考虑订单数据过多,单一表的设计会对系统性能产生较大影响,仅仅采用索引不足以解决性能问题。因此,需要将订单表拆分,按月存储。
王工采用反规范化设计方法来解决,给出了相应的解决方案。李工负责数据中心的设计与开发。李工认为王工的解决方案存在问题,建议采用数据物理分区技术。在解决性能问题的同时,也为后续的数据迁移、数据挖掘和分析等工作提供支持。
【问题1】(8分)
常见的反规范化设计包括增加冗余列、增加派生列、重新组表和表分割。为解决题干所述需求,王工采用的是哪种方法?请用300字以内的文字解释说明该方法,并指出其优缺点。【问题2】(8 分)
物理数据分区技术一般分为水平分区和垂直分区,数据库中常见的是水平分区。水平分区分为范围分区、哈希分区、列表分区等。请阅读下表,在(1)~(8) 中填写不同分区方法在数据值、数据管理能力、实施难度与可维护性、数据分布等方面的特点。
表4-1 水平分区比较表
【问题 3】(9 分)
根据需求,李工宜选择物理水平分区中的哪种分区方法?请用300字以内的文字分别解释说明该方法的优缺点。
答案与解析
- 试题难度:较难
- 知识点:案例分析>数据库方向
- 试题答案:【问题1】王工采用的是表分割的方式进行反规范化设计。
表分割包括水平分割与垂直分割两种形式:
水平分割:根据一列或多列数据的值把数据行放到两个独立的表中。
垂直分割:把主码和一些列放到一个表,然后把主码和另外的列放到另一个表中。优点:(1)表分割的方式将数据分布到多个逻辑与物理上均独立的不同的表。对于电子商务中的订单,最频繁的操作针对的是当月的订单表,表分割后有效地减少了操作表(即当月订单表)的记录数,可有效提升性能。同时按月进行表分割后,也可以针对各月份数据进行管理,有利于数据迁移、备份和管理。缺点:(1)表分割的方式从逻辑上破坏了关系概念的完整性,由一个关系变为多个关系。因此,进行历史数据的数据挖掘和分析时,必须执行多表集合并操作,相对于单表形式,复杂度较高,增加了数据维护的难度,应用软件设计和实现也更为复杂。</div>
【问题2】
(1)连续(2)离散(3)弱(4)强(5)好(6)好(7)不均匀(8)均匀
【问题3】
李工宜选择范围分区方式。
范围分区优点包括:实现容易、数据管理能力强、提高查询效果、利于维护如备份恢复时间都可缩短、利于做过期处理。
范围分区缺点包括:数据分布不均匀所以可以与哈希分区组合应用。 - 试题解析:范围分区:就是根据数据库表中某一字段的值的范围来划分分区。散列分区:散列分区是根据字段的hash值进行均匀分布,尽可能的实现各分区所散列的数据相等。
列表分区:列表分区明确指定了根据某字段的某个具体值进行分区,而不是像范围分区那样根据字段的值范围来划分的。
第 5 题
阅读以下关于 Web 系统架构设计的叙述,在答题纸上回答问题 1至问题 3。
【说明】某公司开发的 B2C 商务平台因业务扩展,导致系统访问量不断增大,现有系统访问速度缓慢,有时甚至出现系统故障瘫痪等现象。面对这一情况,公司召开项目组讨论会议,寻求该商务平台的改进方案。讨论会上,王工提出可以利用镜像站点、CDN内容分发等方式解决并发访问量带来的问题。而李工认为,仅仅依靠上述外网加速技术不能完全解决系统现有问题,如果访问量持续增加,系统仍存在崩溃的可能。李工提出应同时结合Web内网加速技术优化系统改进方案,如综合应用负载均衡、缓存服务器、Web应用服务器、分布式文件系统、分布式数据库等。经过讨论,公司最终决定采用李工的思路,完成改进系统的设计方案。
【问题 1】(10分)
针对李工提出的改进方案,从 a ~j 中分别选出各技术的相关描述和对应常见支持软件填入表 5-1 中的(1) ~(10) 处。
表5-1 技术描述与常见支持软件
(a)保存静态文件,减少网络交换量,加速响应请求
(b) 可采用软件级和硬件级负载均衡实现分流和后台减压
(c) 文件存储系统,快速查找文件
(d) FastDFS
(e) HAProxy
(f) JBoss
(g) Hadoop Distributed File System(HDFS)
(h) Apache Tomcat
(i) Squid
(j) MongoDB
【问题 2】(9 分)
请用100字以内的文字解释分布式数据库的概念,并给出提高分布式数据库系统性能的 3 种常见实现技术。
【问题3】(6 分)
针对 B2C 商务购物平台的数据浏览操作远远高于数据更新操作的特点,指出该系统应采用的分布式数据库实现方式,并分析原因。
答案与解析
- 试题难度:一般
- 知识点:案例分析>Web技术
- 试题答案:【问题1】(1)(b)
(2)(e)
(3)(a)
(4)(i)
(5)(c)
(6)(7)(d)(g)
(8)(9)(f)(h)
(10)(j)
【问题2】
分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的每个节点具有独立处理的能力(称为场地自治),它可以执行局部应用,同时,每个节点也能通过网络通信子系统执行全局应用。
分布式数据库系统性能提升策略:
1.全局查询树的变换
2.副本的选择与多副本的更新策略
3.查询树的分解
4.半连接与直接连接
【问题3】
在本题所涉及到的环境中,由于读取数据的需求非常强烈,涉及到的数据量极大,而更新较少,可以在分布式数据库中采用一主多从的机制来分散读取数据的压力。更新数据时,操作主库,从主库再同步到从库,从库只负责读取数据。 - 试题解析:FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
Jboss是一个基于J2EE的开放源代码的应用服务器。JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用,而不用支付费用。JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容器,一般与Tomcat或Jetty绑定使用。
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。