寒假阅读笔记十二

架构之美——最终用户应用架构(二)

今天,我阅读的是《架构之美》的第十二章,这一章主要讲的是Akonadi框架,让我充分了解了Akonadi框架是什么?怎么用?

kde 4.1中的Akonadi是一个以mysql为存储管理的 KDE 4 存储接口。它分为两个部分,一个称之为 Akonadi服务器,一个是为用户程序提供的和Akonadi服务器打交道的库,Akonadi服务器是单独提供的程序,属于kde的支持部分的一个软件。用户库包含在kdepimlibs之中。Akonadi目前的主要应用是做为kde pim组件的一致的数据后端,如果Akonadi不工作,kde pim各组件按照原来的数据存储进行保存。

Akonadi框架的目标是提供一个访问和操作用户个人信息、关联的元数据以及这些数据之间关系的服务平台。它将从不同来源收集相关的信息,诸如从电子邮件和群件服务。Web和网格服务以及它所触及的本地应用程序和缓存中收集,并提供相应的访问机制。在某次会议中制定的第一份设计草案中,就提到了许多在该架构的后续迭代中仍然存在的关键点。最重要的决策之一就是不使用DBUS来传输实际的负载数据,这虽然是Akonadi中最显然可选的IPC机制。取而代之的是使用了一个名为IMAP的、能够处理成批传输的、独立的传输通道和协议。之所以选择它,主要考虑到它能够对数据传输过程进行控制,应此可以取消冗长的数据传输,这样数据管道就不会阻塞控制管道。基于IMAP的数据传输的负载要比通过IPC机制传输小得多,因为该协议就是面向快速和流式传送大量数据而设计的。而DBUS的传输性能正是放弃它的主要原因之一,在其文档中就已经明确地说明它不是针对这种应用场景设计的。这将可以复用现有的IMAP程序库,在实现该协议时可以减少很多工作。

Akonadi的一个核心观念是为系统中所有的PIM数据和相关的元数据建立一个集中的缓存。然而老框架假定对后端存储的访问通常是在线式的,二Akonadi引用了本地副本机制,这样当需要向用户显示数据时能够马上提供,例如它可以保留许多可能已经获得的数据,以便避免不必要的重新下载。应用程序希望能够直接从内存中获得当前所需显示的信息,而无需自己维护磁盘缓存。这样就需要使缓存是共享的和保持一致的,减少应用程序对内存的访问,并采用惰性加载等优化技术,不过这样做用户无法马上看到数据。由于缓存是一直可用的,虽然可能不完整,但在绝大多数情况下仍然是可离线使用的。这大大加强了基于不可靠、低带宽、高延迟网络时的健壮性。

Akonadi中还有一个基础性的视角,它在其第一次迭代的设计中就已经存在,那就是用来访问特定类型存储后端(如群件服务器)的组建将以单独的进程运行。这样做有好几个好处。与该服务器潜在的错误、缓慢或不可靠的通信都不会影响整个系统的可靠性。

通过阅读这一章,我突然发现世界上比你优秀的人比比皆是,所以我要送一句话给我自己:“压力不是有人比你努力,而是比你牛几倍的人依然在努力。”正如这两个公式所表达的那样:80% = 0%,100% = 100%。要么就不做,要么拼命做!

时间: 2024-08-07 00:14:40

寒假阅读笔记十二的相关文章

寒假阅读笔记十

架构之美--系统架构(四) 今天,我阅读的是<架构之美>的第十章,题目为元循环虚拟机的力量:Jikes RVM,其实说实话,看到这个题目我的头就有点大了,以前从来没有听说过这个名词,究竟什么是Jikes RVM?原来,Jikes RVM的中文名字是Jikes研究虚拟机,它是为执行这样一种Java程序而设计的,这种Java程序典型地用于研究基本的虚拟机设计问题.它为科研院所提供一个灵活的测试平台,可以在这个测试平台上建立新的虚拟机技术的原型和试验各种各样的设计方案.Jikes RVM运行在AIX

Swift学习笔记十二:下标脚本(subscript)

下标脚本就是对一个东西通过索引,快速取值的一种语法,例如数组的a[0].这就是一个下标脚本.通过索引0来快速取值.在Swift中,我们可以对类(Class).结构体(structure)和枚举(enumeration)中自己定义下标脚本的语法 一.常规定义 class Student{ var scores:Int[] = Array(count:5,repeatedValue:0) subscript(index:Int) -> Int{ get{ return scores[index];

Hadoop阅读笔记(二)——利用MapReduce求平均数和去重

前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一年……我在博客园-_-#,希望用dt的代码燃烧脑细胞,温暖小心窝. 上篇<Hadoop阅读笔记(一)——强大的MapReduce>主要介绍了MapReduce的在大数据集上处理的优势以及运行机制,通过专利数据编写Demo加深了对于MapReduce中输入输出数据结构的细节理解.有了理论上的指导,仍

虚拟机VMWare学习笔记十二 - 将物理机抓取成虚拟机

1. 安装VMware vCenter Converter Standalone Client 运行虚拟机,File -- Virtualize a Physical Machine 这时如果电脑中没有VMware vCenter Converter Standalone Client ,则会进行安装. 安装过程 之后图标会出现在桌面上,双击运行 选择连接到本地服务器,登陆 点击转换计算机 这个,可以将本地计算机抓取成虚拟机,也可以将其他可以访问的计算机(需知道管理员用户名及密码)抓取成虚拟机.

swift 笔记 (十二) —— 下标

下标 swift允许我们为 类,结构体,枚举 定义下标,以更便捷的方式访问一大堆属性.比如Array和Dictionary都是结构体,swift的工程师已经为这两个类型提供好了下标操作的代码,所以,我们才可以通过 myArray[2]这种方式,读取和改写这个struct中保存的数据.而且,一个类型中可以定义多种下标访问方式(重载,关于重载,在后面的笔记中会提到,这里先不用太在意) 下标可以定义为"读写"型的,也可以定义为"只读"型,这种行为,是通过定义一组操作完成的

《Hibernate学习笔记十二》学生、课程、分数关系的设计与实现

<Hibernate学习笔记十二>学生.课程.分数关系的设计与实现 这个马士兵老师的Hibernate视频学习的一个题目,这里面要用到多对多.多对一的关联关系以及联合主键,因此觉得挺好的,自己写篇博文来记录下. 先考虑数据库表 1.学生表:为简单起见,只考虑了学生id和学生姓名,其中id为主键 2.课程表:为简单起见,只考虑了课程id和课程名称,其中id为主键 3.分数表 分数表有两种解决方案 3.1 第一种为:使用联合主键:student_id 和 course_id 3.2 第二种:不使用

laravel3学习笔记(十二)

原作者博客:ieqi.net ==================================================================================================== 请求反射 HTTP 协议本身是无状态性的,但是在应用中处理各种业务逻辑时我们必须要有状态的把控,这样,折中的办法就是将状态进行标记然后嵌入到 HTTP 协议的请求中,然后应用根据这些标记来进行状态的串联以及处理.所以我们就要对请求进行反射处理以获取请求信息, Lara

寒假阅读笔记二

大型网站技术架构-阅读笔记二 模式:每一个模式描述了一个在我们周围不断发生的问题及该问题解决方案的核心.这样你就能一次又一次地使用该方案而不必做重复工作. 分层:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统.分层时必须合理规划层次边界和接口,在开发过程中,严格遵循分层架构的约束,禁止跨层次的调用(应用层直接调用数据层)及你想调用(数据层调用服务层,或者服务层调用运用层). 分割:网站越大,功能越复杂,服务和数据处理的种类

java jvm学习笔记十二(访问控制器的栈校验机制)

欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们会简单的描述一下jvm访问控制器的栈校验机制. 这节课,我们还是以实践为主,什么是栈校验机制,讲一百遍不如你自己实际的代码一下然后验证一下,下面我们下把环境搭起来. 第一步,配置系统环境.(copy吧,少年) path=%JAVA_HOME%/bin JAVA_HOME=C:/Java/jdk1.6