自信人生两百年,会当水击三千里!
  • Android 通用架构

    Android 有一个通用的展示软件栈的架构,即是如此图:


    简单介绍:

    Applications 层:主要是 Android 自带的 GMS(Google Mobile Service) 应用和应用开发者开发的应用;

    Application Framework :主要是为 Application 开发者提供各种功能、服务和开发 API

    Android Runtime(Core libraries and Dalvik Virtual Mache) :为应用运行提供运行环境的 Java 虚拟机和运行时库。

    Libraries :主要是 Android 系统运行库和工具集;

           C/C++ 库:

    a)       标准 C/C++ bionic BSD 许可证,可以修改而无需公开源代码。提供 C/C++ 标准库绝大部分的功能,是一个专为嵌入式系统设计的轻量级标准库实现。相对于传统的 glibc ,其体积和内存占用很小。

    b)      C 语言工具库 libcutils :是 Android 系统中的基石库,基本上 Android 中所有的本地库和程序都链接了这个库。

    c)      init 进程:此进程是 Android 设备启动后,系统执行的第一个用户空间的可执行程序,由内核缺省直接启动,以守护进程的形式后台运行。提供以下功能:设备管理、解析并执行初始化脚本 init.rc

    d)      shell 工具: sh toolbox busybox

    e)       C++ 语言工具库 libutils :属于 Android 的底层库。以 C++ 实现,提供的 API 也是 C++ 接口规范。提供基本头文件、 Binder 框架以及使用 Binder 机制的相关库。

    通过 Android 应用程序框架为开发者提供服务的 C/C++ :

    a)       系统 C 库:一个从 BSD 继承来的标准 C/C++ 系统函数库, 是专门为基于嵌入式 Linux 系统的设备定制的。即 bionic libc 库。

    b)      媒体库:基于 PacketVideo OpenCORE 。该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG

    c)      Surface Manager :对显示子系统的管理,并且为多个应用程序提 供了 2D 3D 图层的无缝融合。

    d)      LibWebCore :一个最新的 web 浏览器引擎用,支持 Android 浏览器和一个可嵌入的 web 视图

    e)       SGL - 底层的 2D 图形引擎

    f)       3D libraries :基于 OpenGL ES 1.0 APIs 实现;该库可以使用硬件 3D 加速(如果可用)或者使用高度优化的 3D 软加速。

    g)      SQLite :一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。

    系统工具集 :

    a)       主要以 busybox 为主,链接 bionic libc 库,为大多数嵌入式 Linux 所采用。主要包含一些系统管理工具,全为文本命令行工具。

    b)      另外 Android 官方也提供了专门的调试守护进程,如 adbd 等。

    HAL :一个对硬件访问虚拟化的中间抽象层,接着我们详细介绍;

    Linux Kernel :基于开源 Linux kernel 经过修改的支撑整个软件栈的基础操作系统内核,当前主要是依赖于 Linux kernel 2.6 。驱动主要分为两类,一类是 Android 专用驱动,其并不是硬件驱动,而主要是一些为上层提供服务的辅助功能层,比如 ashmem logger binder power manager ;另一类则是设备驱动则,其多是硬件驱动,属于 Linux 内核标准的驱动,比如 fb 显示驱动 (LCD) 、输入设备驱动 ( 游戏杆、鼠标、键盘、触摸屏 ) 、视频驱动 (Camera) 、音频驱动、 MTD 存储设备驱动、网络驱动 ( 蓝牙、 WiFi Ethernet) 等。驱动在内存映射的时候也分为 kernel space user space ,放在 kernel space 都是需要遵循 GPL 开源的;放在 user space 中的驱动,是遵循 Apache/MIT 许可证的,可以不开源,其运行在 kernel space 之上。

    Hardware Abstraction Layer:

    HAL Google 为了解决 Linux 开源许可证 GPL Android 本身的 Apache 许可证冲突的一个硬件抽象层,主要原则是把控制硬件的动作都放到了 Android HAL 中,而 linux driver 仅仅完成一些简单的数据交互作用,甚至把硬件寄存器空间直接映射到 user space

    HAL 存在的原因:

    1.       快速适配硬件设备中非 linux kernel 标准的接口;

    2.       解决 Linux 开源许可证 GPL 与硬件设备厂商驱动的专利不兼容;通过 Android Apache 许可证和 HAL 技术实现来解决这一难题;

    3.       开放的满足设备厂商开发开与之驱动对应的特定需求的要求;

    HAL 层具备如下特点:

    1.       在用户空间 (user space) 而不是内核空间 (kernel space) ,可以是 c/c++ 库;

    2.       Android platform 部分和系统硬件完全的进行了隔离开;

    3.       向上层提供 Android platform 操作硬件的接口,向下要求硬件驱动对其功能进行实现; ( 比方说上层应用对于 Graphics, Audio, Camera, Bluetooth, GPS, Radio(RIL), Wifi 等的操作。 )

    在编程方式上,上层应用通过 HAL 对硬件的操作有两种方式:

    1.       通过 Java->JNI->*.so (c/c++)


    2.       通过 Java app->ApplicationManager->Service(java)->service(jni)->HAL->HAL stub->System Call 方式进行调用;


    注:一般 HAL 动态库放在位置 /system/lib/hw 目录。

    一般开发类型

    1.       Android 手机产品:构建硬件系统,移植 Android 软件平台系统;主要涉及设备驱动程序,以及在硬件抽象层实现标准接口等。


    2.       Android 应用程序:基于 Application Framework 和其他应用,开发应用程序;

    3.       Android 系统开发:主要是增强或者完善 Android 平台系统的功能,开发中主要包含如下部分:

    a)         开发 c 或者 c++ 库;

    b)        定义将要通过 JNI 提供的上层 Java 的系统 API 接口;

    c)        封装 JNI

    d)        通过 JNI 封装 Java 类和接口 API ,提供给 Android 应用使用;

    Android 开发社区

    Cyanogenmod 社区: http://www.cyanogenmod.com/

    涉及开发语言: C/C++/Java 等。

  • 文章《Eclipse社区调查结果发布》是Elcipse Community的一个使用调查报告,参入调查者53.8%是Programmer,17.7%是System Architect,11.5%是Development Manager。
    在这个数据里面,可以分析:
    1.在开发工具方面,Windows/Linux/Mac OS X + Subversion/CVS + Bugzilla/Atlassian Jira + Oracle/MySQL + Tomcat/JBoss是主流选择。说明这些工具已经和广大Eclipser们朝夕相处了,这些产品或者是商用的,或者是开源的,都已经在广大开发者中间实践并大幅推广了;(产品/工具)
    2.使用开源、贡献开源代码的人大幅度增加:48.2%的参入调查者所在的公司允许使用OSS并反馈回OSS社区(而2007年是37%);46%的参入调查者所在的公司仅仅允许使用OSS而不能反馈回OSS社区(而2007年是27%);其中15.6%的参入调查者所在的组织把OSS作为商业模式(their organation relies on OSS as a business model),而2007年这个数据是10%;(社区)
    3.89.1%用户对Eclipse满意或者很满意。(声望)

  • 文章《Geek and Penguin》(原文)论述了融入到开源中去的八种步伐。
    给人印象深刻的两句话:
    To truly embrace open-source is not just to read about it, but to apply it to everyday life.
    open-source doesn't necessarily mean cheaper- in  a lot of ways, it means better.
    这八种步伐分别是:
    1.Install LINUX on your computer.
    2.Use free, open-source software.
    3.If you're a developer, contribute to an open-source project.
    4.Start a blog. Tell people HOW you achieved your accomplishments.
    5.Join an open source community.
    6.Promote Open Source. Preach the Gospel.
    7.Create your own open source project.
    8.Become an Open Source expert.
    其中:
    Open Source User通过1,2方式使用开源。
    Open Source Participator通过3,4,5方式参入开源。
    Open Source Expert通过6,7,8方式为开源布道。

    也许每一天你都在使用开源,那参入、布道呢?

  • 2010-05-18

    NoSQL - [NoSQL]

    Tag:opensource

    NoSQL是一个易于误解的名词,其在技术社区是全称not only sql的缩写。
    它主要是来源于人们对于下一代数据库的发展和定位思想:non-relational,distributed,open-source,horizontal scalable。这场全新的数据库革命运动在2009年告诉增长,同时希望具备更多特性:schema-free,easy replication support,simple API,eventulally consistent/BASE。
    NoSQL的整体架构主要可被分为四层(原图来源):


      1. 接口层(Interfaces):这层主要是为应用层次或者客户层提供API接口,主要包括:REST,Map Reduce,Get/Put,Thrift和语言特定的API等。
      2. 逻辑数据模型层(Logical Data Model):这层主要是提供数据的逻辑表现形式,其逻辑模型主要有:Key-Value,列式,文档形式和图式等。
      3. 数据分布模型层(Data Distribution Model):这层主要是实现了数据分布功能,主要有:CAP支持,多数据中心支持和动态部署支持等多种形式。
      4. 数据持久化层(Data Persitence):这层主要是定义了数据的存储/持久化形式,主要有四种形式:基于内存,基于硬盘,内存和硬盘兼容存储等。
    NoSQL在市场上的产品可以按其提供的逻辑数据模型来划分,主要分为:
    Wid Column Store/Column Families
    Document Store
    Key Value/Tuple Store
    Eventually Consistent Key Value StoreGraph Databases
    Object Databases
    Grid Database Solutions
    XML Dababases
    others等等。
    不同的逻辑数据模型的产品,也会适用于不同的行业业务,具体的NoSQL系统请参考http://nosql-databases.org/

    参考:
    http://www.infoq.com/articles/nosql-in-the-enterprise
    http://nosql-databases.org/

  • OSCON 2009大会Joaauin RuizControlling the Addiction:Best Practices for Scaling with Memcached&the LAMP Stack主题演讲中探讨的Caching Architecture for Scaling Out:

    从这个图的层次可以看到,Web架构在物理上可能至少需要关注的Layer层次:
    1.Client客户端
    2.Internet CDN
    3.Net Interface
    4.Web Stack(包含Memcached的缓存所在的层次)
    5.Storage Interface和Storage