gaojingsong http://doc.okbase.net/gaojingsong 【Android平台下几种推送方案】 http://doc.okbase.net/gaojingsong/archive/298873.html gaojingsong 2018/6/18 8:50:27

一、使用GCM(Google Cloude Messaging)

Android自带的推送GCM可以帮助开发人员给他们的Android应用程序发送数据。它是一个轻量级的消息,告诉Android应用程序有新的数据要从服务器获取,或者它可能是一个消息,其中包含了4KB的payload data(像即时通讯这类应用程序可以直接使用该payload消息)。GCM服务处理排队的消息,并把消息传递到目标设备上运行的Android应用程序。

优点:Google提供的服务、原生、简单,无需实现和部署服务端。

缺点:1.要求Android 2.2以上,对于不少2.2以前的系统没法推送;

     2.国内服务不稳定。而且不少国内的终端厂商纷纷把Google的服务去掉,替换上自己的。

     3.需要用户绑定Google账号,但不少国内用户没有Google账号。

 

二、使用XMPP协议(Openfire+Spark+Smark)

XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性,有很强的可扩展性。包括上面讲的GCM服务器底层也是采用XMPP协议封装的。

优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。

缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

 

而androidpn(Android Push Notification)就是基于 XMPP 开源组件的一套整合方案,服务端基于Openfire、客户端基于Smack。到AndroidPN项目主页( http://sourceforge.net/projects/androidpn/ ) 下载2个文件: androidpn-server-0.5.0-bin.zip 和 androidpn-client-0.5.0.zip 分别是服务器和客户端的代码。详细的实现方式网上有不少文章。

  1.androidpn服务端重启后客户端不会重连,这个非常悲剧

  2.由于服务器不保存消息,造成了如果客户端当前离线就收不到消息

  3.androidpn发送完消息就不管了,所以没有消息回执报表之类,造成没法做应用后续的数据分析用户体验的改善,这对于企业级的应用是个致命伤。

 

XMPP协议比较费电费流量,这个对当前智能机的消耗太大,在窄带网络和不稳定的(手机)网络都不是最优的选择。但总体来说,XMPP协议还是比较成熟的。

 

三、使用MQTT协议(想了解更多可以看http://mqtt.org/)



 

轻量级的、基于代理的“发布/订阅”模式的消息传输协议。

优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考: http://mqtt.org/software),且已有C++版的服务端组件rsmb。

缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

 

四、HTTP轮循方式

定时向HTTP服务端接口(Web Service API)获取最新消息。

优点:实现简单、可控性强,部署硬件成本低。

缺点:实时性差。

成本大,需要自己实现与服务器之间的通信,例如消息排队等;

到达率不确定,考虑轮询的频率:太低可能导致消息的延迟;太高,更费客户端的资源(CPU资源、网络流量、系统电量)和服务器资源(网络带宽)

 

五、采用第三方服务

就是前面介绍的第三方推送,客户端只需要导入第三方提供的lib库,有第三方管理长连接,负责消息的接收/发送。同时对消息都有比较详细的报表数据,可以用于做数据分析、挖掘,改善用户体验。

 

六、SMS信令推送

原理 基于Push方式

具体描述

服务器有新消息时,发送1条类似短信的信令给客户端,客户端通过拦截信令,解析消息内容 / 向服务器获取信息

 

优点

可实现完全的实时操作

缺点

成本高(主要是短信资费的支出)

 

 

推送的原理主要是2种方式:Push 和 Pull


 

  • 大小: 54 KB
  • 大小: 63.4 KB
]]> 【MySQL 关于登陆密码过期设置】 http://doc.okbase.net/gaojingsong/archive/298872.html gaojingsong 2018/6/18 8:50:20

安装的过程中有这样的一句话:

A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER !You will find that password in '/root/.mysql_secret'.

You must change that password on your first connect,no other statement but 'SET PASSWORD' will be accepted.

See the manual for the semantics of the 'password expired' flag.

 

大概意思就是 一个随机的密码已经生成 可以在  '/root/.mysql_secret'. 中找到,第一次连接必须变更密码 且只能使用 'SET PASSWORD' 命令,在user 表中新增加了'password expired'  列,也就是密码过期

 

 

mysql> select 1;

ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

#提示必须现更改密码才能执行语句

mysql> set password=password('password2013');

Query OK, 0 rows affected (0.00 sec)

 

 

password expire default 子句就是用来设置mysql 账号的密码过期时间的(单位天)。

 

 

可以在MySQL的配置文件中设置一个默认值,这会使得所有MySQL用户的密码过期时间都为90天,MySQL会从启动时开始计算时间。my.cnf配置如下:

[mysqld]

default_password_lifetime=90

 

如果要设置密码永不过期的全局策略,可以这样:(注意这是默认值,配置文件中可以不声明)

[mysqld]

default_password_lifetime=0

 

 

在MySQL运行时可以使用超级权限修改此配置:

mysql> SET GLOBAL default_password_lifetime = 90;

Query OK, 0 rows affected (0.00 sec)

 

 

还可以使用ALTER USER命令为每个具体的用户账户单独设置特定的值,它会自动覆盖密码过期的全局策略。要注意ALTER USER语句的INTERVAL的单位是“天”。

ALTER USER ‘testuser'@‘localhost' PASSWORD EXPIRE INTERVAL 30 DAY;

 

 

禁用密码过期:

ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;

 

让用户使用默认的密码过期全局策略:

ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE DEFAULT;

 

从MySQL 5.7.6版开始,还可以使用ALTER USER语句修改用户的密码:

mysql> ALTER USER USER() IDENTIFIED BY '637h1m27h36r33K';

Query OK, 0 rows affected (0.00 sec)

 

 

service mysql stop

bin/mysqld_safe --skip-grant-tables --skip-networking &

mysql

select user,host,authentication_string,password_expired from mysql.user;

update user set authentication_string=password('admin123') where user='root';

update user set password_expired='N' where user='root';

select user,host,authentication_string,password_expired from user;

filush privileges;

exit;

]]>
【持续集成介绍】 http://doc.okbase.net/gaojingsong/archive/298870.html gaojingsong 2018/6/18 8:25:26

什么是持续集成?

Continuous integration(CI)

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

 

 

持续集成(CI)是一种实践,旨在缓和和稳固软件的构建过程。持续集成最早由Martin Fowler 于10年前已经提出,希望通过持续集成能够实现以下过程:

1)任何人在任何地点,任何时间可以构建整个项目。

2)在持续集成构建过程中,每一个单元测试都必须被执行。

3)在持续集成构建过程中,每一个单元测试都必须通过。

4)持续集成构建的结果是可以发布的软件包。

5)当以上任何一点不能满足时,整个团队的主要任务就是去解决这个问题。

 

 

jenkins介绍

Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有 

Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins,jenkins在功能上远远超过hudson

]]>
【分布式配置中心之disconf】 http://doc.okbase.net/gaojingsong/archive/298410.html gaojingsong 2018/6/11 8:05:21

Distributed Configuration Management Platform(分布式配置管理平台)

专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」

 

之前一直采用properties文件管理配置信息,若是集群则每个机器上都要拷贝一份,每次修改也需要依次修改。一直在寻找统一修改,实时生效,方便修改,分环境分系统的配置管理

 

Diamond则是淘宝开源的一种分布式配置管理服务的实现

disconf是来自百度的分布式配置管理平台,包括百度、滴滴出行、银联、网易、拉勾网、苏宁易购、顺丰科技 等知名互联网公司正在使用!

 

Xdiamond

1、基于数据库做配置存储

2、相对于diamond增加了权限设计,结合Secret key,保证配置的安全

3、配置缓存在本地,防止应用因为网络问题而不能启动

 

Qconf

1、奇虎 360 内部分布式配置管理工具

2、用C/C++编写,支持c/c++、shell、php、python 等语言

3、应用Zookeeper做集群管理

4、多进程的情况下,QPS 能够达到百万

 

etcd

1、使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性

 

主要目标:

1)部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线

2)部署动态化:更改配置,无需重新打包或重启,即可 实时生效

3)统一管理:提供web平台,统一管理 多个环境(RD/QA/PRODUCTION)、多个产品 的所有配置

4)核心目标:一个jar包,到处运行



 模块信息

disconf-core: 分布式配置基础包模块

disconf-client: 分布式配置客户端模块, 依赖disconf-core包。 用户程序使用它作为Jar包进行分布式配置编程。

disconf-tool: 分布式配置工具包,依赖disconf-core包。 Disconf-tool是disconf的辅助工具类。

disconf-web: 分布式配置平台服务模块, 依赖disconf-core包。采用SpringMvc+纯HTML方式实现。 用户使用它来进行日常的分布式配置管理。

disconf-standalone-demo: 使用disconf的基于Spring的standalone demo程序

disconf-standalone-dubbo-demo: 集成了disconf和dubbo的基于Spring的standalone demo程序

disconf-spring-demo: 使用disconf的SpringMvc Web demo程序

功能特点

  • 支持配置(配置项+配置文件)的分布式化管理
  • 配置发布统一化
    • 配置发布、更新统一化:
      • 同一个上线包 无须改动配置 即可在 多个环境中(RD/QA/PRODUCTION) 上线
      • 配置存储在云端系统,用户统一管理 多个环境(RD/QA/PRODUCTION)、多个平台 的所有配置
    • 配置更新自动化:用户在平台更新配置,使用该配置的系统会自动发现该情况,并应用新配置。特殊地,如果用户为此配置定义了回调函数类,则此函数类会被自动调用。
  • 极简的使用方式(注解式编程 或 XML无代码侵入模式):我们追求的是极简的、用户编程体验良好的编程方式。目前支持两种开发模式:基于XML配置或者基于注解,即可完成复杂的配置分布式化。
  • 低侵入性或无侵入性、强兼容性:
    • 低侵入性:通过极少的注解式代码撰写,即可实现分布式配置。
    • 无侵入性:通过XML简单配置,即可实现分布式配置。
    • 强兼容性:为程序添加了分布式配置注解后,开启Disconf则使用分布式配置;若关闭Disconf则使用本地配置;若开启Disconf后disconf-web不能正常Work,则Disconf使用本地配置。
  • 支持配置项多个项目共享,支持批量处理项目配置。
  • 配置监控:平台提供自校验功能(进一步提高稳定性),可以定时校验应用系统的配置是否正确。

注:配置项是指某个类里的某个Field字段。

Disconf的功能特点描述图:



 

  • 大小: 26 KB
  • 大小: 133.4 KB
]]> 【SaaS 介绍】 http://doc.okbase.net/gaojingsong/archive/298409.html gaojingsong 2018/6/11 8:05:14

SaaS是Software-as-a-service(软件即服务)。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,向SaaS提供商租赁软件服务。

 

SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,向SaaS提供商租赁软件服务。

 

SaaS 是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。 SaaS应用软件的价格通常为“全包”费用,囊括了通常的应用软件许可证费、软件维护费以及技术支持费,将其统一为每个用户的月度租用费。

对于广大中小型企业来说,SaaS是采用先进技术实施信息化的最好途径。但SaaS绝不仅仅适用于中小型企业,所有规模的企业都可以从SaaS中获利。

 

2008 年前,IDC 将SaaS 分为两大组成类别:托管应用管理 (hosted AM) - 以前称作应用服务提供 (ASP),以及“按需定制软件”,即 SaaS 的同义词。从 2009 年起,托管应用管理已作为 IDC 应用外包计划的一部分,而按需定制软件以及 SaaS 被视为相同的交付模式对待。

 

SaaS已成为软件产业的一个重要力量。只要SaaS的品质和可信度能继续得到证实,它的魅力就不会消退。

 

SaaS特性

a) 服务的收费方式风险小,灵活选择模块,备份,维护,安全,升级

b) 让客户更专注核心业务

c) 灵活启用和暂停,随时随地都可使用

d) 按需定购,选择更加自由

e) 产品更新速度加快

f) 市场空间增大

g) 订阅式的月费模式

h) 有效降低营销成本

i) 准面对面使用指导

j) 在全球各地,7*24全天候网络服务

k) 不需要额外增加专业的IT人员

l) 大大降低客户的总体拥有成本

SaaS的一些应用

a、实际上saas主要在CRM软件领域应用广泛。

b、另外,进销存,物流软件等也是一种应用。

C、更广义的是工具化SaaS,比如视频会议租用等,企业邮箱等成为SaaS应用的主要应用。

 

SaaS的优点在于:

1. 从技术方面来看:SaaS是简单的部署,不需要购买任何硬件,刚开始只需要简单注册即可。企业无需再配备IT方面的专业技术人员,同时又能得到最新的技术应用,满足企业对信息管理的需求。

2. 从投资方面来看:企业只以相对低廉的“月费”方式投资,不用一次性投资到位,不占用过多的营运资金,从而缓解企业资金不足的压力;不用考虑成本折旧问题,并能及时获得最新硬件平台及最佳解决方案。

3. 从维护和管理方面来看:由于企业采取租用的方式来进行物流业务管理,不需要专门的维护和管理人员,也不需要为维护和管理人员支付额外费用。很大程度上缓解企业在人力、财力上的压力,使其能够集中资金对核心业务进行有效的运营;SaaS能使用户在世界上都是一个完全独立的系统。如果您连接到网络,就可以访问系统。

 

缺点

1.安全性:企业,尤其是大型企业,很不情愿使用SaaS正是因为安全问题,他们要保护他们的核心数据,不希望这些核心数据由第三方来负责。

2.标准化:SaaS解决方案缺乏标准化。这个行业刚刚起步,没有明确的解决办法,一家公司可以设计建立一个解决方案。鉴于复杂和高度可定制的ERP产品,这是一个冒险的建议。

 

 

如何辨别具体的一种SaaS是否安全,需要把握以下几点:

1、传输协议加密

首先,要看SaaS产品提供使用的协议,是https://还是一般的http://,别小看这个s,这表明所有的数据在传输过程中都是加密的。如果不加密,网上可能有很多“嗅探器”软件能够轻松的获得您的数据,甚至是您的用户名和密码;实际上网上很多聊天软件帐号被盗大多数都是遭到“嗅探器”的“招”了。

其次,传输协议加密还要看是否全程加密,即软件的各个部分都是https://协议访问的,有部分软件只做了登录部分,这是远远不够的。比如Salesforce、XToolsCRM都是采取全程加密的。

2、服务器安全证书

服务器安全证书是用户识别服务器身份的重要标示,有些不正规的服务厂商并没有使用全球认证的服务器安全证书。用户对服务器安全证书的确认,表示服务器确实是用户访问的服务器,此时可以放心的输入用户名和密码,彻底避免“钓鱼”型网站,大多数银行卡密码泄漏都是被“钓鱼”站钓上的。

3、URL数据访问安全码技术

对于一般用户来说,复杂的URL看起来只是一串没有意义的字符而已。但是对于一些IT高手来说,这些字符串中可能隐藏着一些有关于数据访问的秘密,通过修改URL,很多黑客可以通过诸如SQL注入等方式攻入系统,获取用户数据。

4、数据的管理和备份机制

SaaS服务商的数据备份应该是完善的,用户必须了解自己服务商为您提供了什么样的数据备份机制,一旦出现重大问题,如何恢复数据等。服务商在内部管理上如何保证用户数据不被服务商所泄露,也是需要用户和服务商沟通的。

5、运营服务系统的安全

在评估SaaS产品安全度的时侯,最重要的是看公司对于服务器格局的设置,只有这样的格局才是可以信任的,包括:运营服务器与网站服务器分离。

服务器的专用是服务器安全最重要的保证。试想,如果一台服务器安装了SaaS系统,但同时又安装了网站系统、邮件系统、论坛系统……,他还能安全吗?在黑客角度来说,越多的系统就意味着越多的漏洞,况且大多数网站使用的网站系统、邮件系统和论坛系统都是在网上能够找到源代码的免费产品,有了源代码,黑客就可以很容易攻入。很多网站被攻入都是因为论坛系统的漏洞。

 

1. SaaS:提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过搜客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储等等;

NIST云计算划分

NIST云计算划分

2. PaaS:提供给消费者的服务是把客户采用提供的开发语言和工具(例如Java,python, .Net等)开发的或收购的应用程序部署到供应商的云计算基础设施上去。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置;

3. IaaS: 提供给消费者的服务是对所有设施的利用,包括处理器、存储、网络和其它基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如,防火墙,负载均衡器等)的控制。

]]>
【Zdal 介绍】 http://doc.okbase.net/gaojingsong/archive/298129.html gaojingsong 2018/6/7 8:27:23

1.1 什么是zdal?

    Zdal是支付宝自主研发的数据中间件产品,采用标准的JDBC规范,可以在分布式环境下看上去像传统数据库一样提供海量数据服务,是一种通用的分库分表数据库访问框架。

 

1.2 它能解决什么问题?

    它能在数据访问压力过大时,解决单库单表数据库访问压力,Zdal主要提供分库分表,分散压力,结果集合并,sql解析,数据库failover动态切换等功能,提供互联网金融行业的数据访问层统一解决方案,

 

1.3 实际运用

   目前已经在支付宝的交易,支付,会员,金融等大部分关键应用上使用,并且在2013年双11大促中运行稳定。

 

 

2.1 zdal组件主要有5部分组成:

Zdal-client:开发编程接口,实现jdbc的Datasource,Connection,Statement,PreparedStatement,ResultSet等接口,实现通用的jdbc-sql访问,内部还实现读库重试,group数据源的选择器,表名替换,sql执行器等功能。

Zdal-parser:支持oracle/mysql/db2等数据库的sql语句解析,并且缓存。根据规则引擎提供的参数列表,在指定的sql中查找到需要的参数,然后返回拆分字段。

Zdal-rule:根据zdal-parser解析后的拆分字段值来确定逻辑库和物理表名。

Zdal-datasource:数据库连接的管理,支持mysql,oracle,db2数据库的连接管理。

Zdal-common:zdal组件所使用的一些公共组件类

 

2.3 zdal是怎么实现的呢?

a、不同于以往的jdbc连接,zdal实现同时与多个数据源绑定 

b、根据规则引擎生成的目标库id和表名,根据其中的某个字段计算该数据属于的物理数据库 

c、然后动态指定读库,对该库进行操作

 

Zdal初始化流程



 

 

Zdal总体流程



 

Zdal-client 模块主要是完成以下几部分工作:

1.加载配置文件进行初始化工作,初始化groovy规则引擎。

2.对jdbc 标准接口的封装,包括 DataSource、Connection、Statement、PrepareStatment等,并提供一个一对多的管理容器,可以管理多个jdbc建立的资源。

3.SQL执行:根据规则引擎生成的目标库id和表名,进行表名替换后在目标库上执行该sql,如果是跨库跨表的sql,需要进行多个结果集的merge。

4.读库重试,即在读库发生断连接问题的时候,Zdal会自动的尝试从对等的其他读库中去查询这条数据,尽最大努力保证在数据库还有访问能力的情况下,保证数据的可访问性。

5.将传入的sql 和 参数进行包装后,调用 zdal-parser 和zdal-rule的 相关接口,进行sql的解析以及计算相应的分库分表结果。在此模块将会实现表名替换的功能,即将sql的逻辑表名替换成带后缀的物理表名。

6.动态指定读库功能,即可以让业务根据实际需求指定一组中的某个读库进行操作,也可以指定到写库读。

7.聚合函数结果集合并,针对count,sum,max,min等聚合函数在多个数据源的执行结果,进行结果集的合并。

 

Zdal-parser

Parser组件包括如下几个部分:

1. Lexer 词法解析。

2.Parser,Parser包括ExprParser,各种StatementParser。

3. AST, Abstract Syntax TreeParse出来的结果就是AST。

4.StatementParser:解析各种sql语句,按照词法分析和语法分析提炼sql的关键字。

5.Visitor:根据StatementParser的解析结果对AST做各种处理,比如FormatOutput,遍历,tableName,表达式,函数,绑定参数,分页参数,获取sql解析的结果。

 

Zdal-rule 主要是完成规则的计算,包括分库的计算和分表的计算,相当于是一个二次路由的过程,包括单库单表、单库多表以及多库多表等几种情况。为了适应规则的灵活配置,目前主要是采用书写groovy脚本的方式来配置规则,或者在代码里封装拆分规则静态方法,在规则里调用该静态方法即可。

 

Zdal-common

Zdal功能所用到一些公共组件类,包括StringUtils,BeanUtils,DataUtils等公共工具类。

 

  • 大小: 63.4 KB
  • 大小: 73.3 KB
]]> 【Cetus 介绍】 http://doc.okbase.net/gaojingsong/archive/297280.html gaojingsong 2018/5/26 13:58:49

Cetus是由C语言开发的关系型数据库MySQL的中间件,主要提供了一个全面的数据库访问代理功能。Cetus连接方式与MySQL基本兼容,应用程序几乎不用修改即可通过Cetus访问数据库,实现了数据库层的水平扩展和高可用。

 

主要功能特性

Cetus分为读写分离和分库两个版本。可通过编译参数选择适合的版本。Cetus为了更好的提供服务,选了单进程模式,单进程特点鲜明,用情专一,无锁模式更能大大的提升单个实例的效率。另外Cetus还支持对用户透明的各项高大上功能,例如分布式事务、连接池、结果集压缩、安全管理、状态监控、Tcp Stream传输等等。

针对读写分离版本:

  • 单进程无锁提升单个实例效率

  • 支持透明的后端连接池

  • 支持SQL读写分离

  • 增强SQL路由解析与注入

  • 支持prepare语句

  • 支持结果集压缩

  • 支持安全性管理

  • 支持状态监控

  • 支持tcp stream流式

  • 支持域名连接后端

  • SSL/TLS支持

  • MGR支持

  • 读强一致性支持(待实现)

针对分库版本:

  • 单进程无锁提升单个实例效率

  • 支持透明的后端连接池

  • 支持数据分库

  • 支持分布式事务处理

  • 支持insert批量操作

  • 支持有条件的distinct操作

  • 增强SQL路由解析与注入

  • 支持结果集压缩

  • 具有性能优越的结果集合并算法

  • 支持安全性管理

  • 支持状态监控

  • 支持tcp stream流式

  • 支持域名连接后端

  • SSL/TLS支持

  • MGR支持

  • 读强一致性支持(待实现)

 

 


功能模块

Cetus 主要的功能模块包括以下五个部分:

1.读写分离

2.分库

3.SQL解析

4.连接池

5.管理功能

 

Cetus 整体工作流程图如下



 整体工作流程如下所述:

1.Cetus读取启动配置文件和其他配置并启动,监听客户端请求;

2.收到客户端新建连接请求后,Cetus经过用户鉴权和连接池判断连接数是否达到上限,确定是否新建连接;

3.连接建立和认证通过后,Cetus接收客户端发送来的SQL语句,并进行词法和语义分析,对SQL语句进行解析,分析SQL的请求类型,必要时改写SQL,然后选取相应的DB并转发;

4.等待后端处理查询,接收处理查询结果集,进行合并和修改,然后转发给客户端;

5.如收到客户端关闭连接的请求,Cetus判断是否需要关闭后端连接,关闭连接。

 

  • 大小: 123.6 KB
  • 大小: 160.6 KB
]]> 【j2cache二级缓存框架介绍】 http://doc.okbase.net/gaojingsong/archive/297279.html gaojingsong 2018/5/26 13:58:36

J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架

 

J2Cache 是 OSChina 目前正在使用的两级缓存框架(要求至少 Java 8)。第一级缓存使用内存(同时支持 Ehcache 2.x、Ehcache 3.x 和 Caffeine),第二级缓存使用 Redis 。 由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目标是降低对 L2 的读取次数。 该缓存框架主要用于集群环境中。单机也可使用,用于避免应用重启导致的缓存冷启动后对后端业务的冲击。

 

J2Cache 的两级缓存结构

L1: 进程内缓存(caffeine\ehcache)

L2: Redis 集中式缓存

 

J2Cache 配置

配置文件位于 core/resources 目录下,包含三个文件:

j2cache.properties J2Cache 核心配置文件,可配置两级的缓存,Redis 服务器、连接池以及缓存广播的方式

caffeine.properties 如果一级缓存选用 Caffeine ,那么该文件用来配置缓存信息

ehcache.xml Ehcache 的配置文件,配置说明请参考 Ehcache 文档

ehcache3.xml Ehcache3 的配置文件,配置说明请参考 Ehcache 文档

network.xml JGroups 网络配置,如果使用 JGroups 组播的话需要这个文件,一般无需修改

 

数据读取

读取顺序 -> L1 -> L2 -> DB



 

数据更新

1 从数据库中读取最新数据,依次更新 L1 -> L2 ,发送广播清除某个缓存信息

2 接收到广播(手工清除缓存 & 一级缓存自动失效),从 L1 中清除指定的缓存信息



 

  • 大小: 28.9 KB
  • 大小: 27.1 KB
]]> 【Apache Ignite 介绍 】 http://doc.okbase.net/gaojingsong/archive/297000.html gaojingsong 2018/5/23 8:12:09

Ignite  is a memory-centric distributed database, caching, and processing platform for transactional, analytical, and streaming workloads, delivering in-memory speeds at petabyte scale

 

Apache Ignite内存数据组织平台是一个高性能、集成化、混合式的企业级分布式架构解决方案,核心价值在于可以帮助我们实现分布式架构透明化,开发人员根本不知道分布式技术的存在,可以使分布式缓存、计算、存储等一系列功能嵌入应用内部,和应用的生命周期一致,大幅降低了分布式应用开发、调试、测试、部署的难度和复杂度。



 

Apache Ignite内存数组组织框架是一个高性能、集成和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不同的数据源之间提供高性能、分布式内存中数据组织管理的功能。

 

 

特性: 

可以将Ignite视为一个独立的、易于集成的内存组件的集合,目的是改进应用程序的性能和可扩展性,部分组件包括:

高级的集群化

数据网格(JCache)

流计算和CEP

计算网格

服务网格

Ignite文件系统

分布式数据结构

分布式消息

分布式事件

Hadoop加速器

Spark共享RDD

 



 

Ignite如下特性

1)使用off-heap缓存:避免gc停顿。

2)固化内存可设置堆外内存使用阈值,随着历史地址的增多,系统内存被耗尽时,因持久化特性,固化内存会在内存中保留热数据,自动地将冷数据移出内存到磁盘

3)使用持久化:宕机无须担心历史数据丢失,重启无须初始化。

4)使用集群:可自动同步节点中的数据,可自动发现新机器,方便扩展,提升性能。

5)使用固化内存的“复制”模式,只查询本机,占用内存大,但是性能好。

6)H2内置数据库,以标准SQL语法存储和查询数据,且能自定义SQL函数,便于应付不同规则。

7)对于客户环境,程序能自检出建议调优的系统配置项

 

 

内存优势

1)堆外内存

2)避免显著的GC暂停现象

3)自动化碎片清理

4)可预估的内存消耗

5)高SQL性能

 

磁盘优势

1)可选的持久化

2)支持SSD介质

3)分布式存储

4)支持事物

5)集群瞬时启动

 

 

Ignite的持久化存储具有以下优势:

1)可以在数据中执行SQL操作,不管数据在内存还是在磁盘中,这意味着Ignite可以作为一个经过内存优化的分布式SQL数据库

2)可以不用讲所有的数据和索引保持在内存中,持久化存储可以在磁盘上存储数据的大数据集合,然后只在内存中保持访问频繁的数据子集

3)集群是瞬时启动,如果整个集群宕机,不需要通过预加载数据来对内存进行数据“预热”,只需要将所有集群的节点都连接到一起,整个集群即可正常工作

4)数据和索引在内存和磁盘中以相似的格式进行存储,避免复杂的格式转化,数据集只是在内存和磁盘之间进行移动

  • 大小: 74.2 KB
  • 大小: 76.6 KB
]]> 【 ButterKnife介绍】 http://doc.okbase.net/gaojingsong/archive/296422.html gaojingsong 2018/5/16 8:22:10

一、 ButterKnife介绍

注解中相对简单易懂的很不错的开源框架 

1. 强大的View绑定和Click事件处理功能,简化代码,提升开发效率 

2. 方便的处理Adaper里的ViewHolder绑定问题 

3. 运行时不会影响app效率,使用配置方便 

4. 代码清晰,可读性强



 

Field and method binding for Android views which uses annotation processing to generate boilerplate code for you.

  • Eliminate findViewById calls by using @BindView on fields.
  • Group multiple views in a list or array. Operate on all of them at once with actions, setters, or properties.
  • Eliminate anonymous inner-classes for listeners by annotating methods with @OnClick and others.
  • Eliminate resource lookups by using resource annotations on fields.

 

事件注解

一共有12个

名称 作用
@OnClick 点击事件
@OnCheckedChanged 选中,取消选中
@OnEditorAction 软键盘的功能键
@OnFocusChange 焦点改变
@OnItemClick item被点击(注意这里有坑,如果item里面有Button等这些有点击的控件事件的,需要设置这些控件属性focusable为false)
@OnItemLongClick item长按(返回真可以拦截onItemClick)
@OnItemSelected item被选择事件
@OnLongClick 长按事件
@OnPageChange 页面改变事件
@OnTextChanged EditText里面的文本变化事件
@OnTouch 触摸事件
@Optional 选择性注入,如果当前对象不存在,就会抛出一个异常,为了压制这个异常,可以在变量或者方法上加入一下注解,让注入变成选择性的,如果目标View存在,则注入, 不存在,则什么事情都不做=如下代码

 

 

绑定注解

有11种

名称 解析
@BindViews 绑定多个view id为一个view的list变量
@BindView 绑定一个view id为一个view 变量
@BindArray 绑定string里面array数组,@BindArray(R.array.city ) String[] citys ;
@BindBitmap 绑定图片资源为Bitmap,@BindBitmap( R.mipmap.wifi ) Bitmap bitmap;
@BindBool 绑定真假boolean
@BindColor 绑定color,@BindColor(R.color.colorAccent) int black;
@BindDimen 绑定Dimen,@BindDimen(R.dimen.borth_width) int mBorderWidth;
@BindDrawable 绑定Drawable,@BindDrawable(R.drawable.test_pic) Drawable mTestPic;
@BindFloat 绑定float
@BindInt 绑定int
@BindString 绑定一个String id为一个String变量,@BindString( R.string.app_name ) String meg;
  • 大小: 205.2 KB
]]>