XiaoMi Chronos 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
XiaoMi Chronos 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
XiaoMi Chronos 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
XiaoMi Chronos 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
XiaoMi Chronos 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言 Java
操作系统 跨平台
软件类型 开源软件
开源组织 小米
地区 国产
投 递 者 红薯
适用人群 未知
收录时间 2014-06-27

软件简介

Chronos,在古希腊语意为时间,是小米公司开发的实现高可用高性能提供全局唯一而且严格单调递增timestamp的服务。

Chronos 采用主备架构,主服务器挂了以后备服务器迅速感知并接替服务,从而实现系统的高可用。服务端使用Thrift框 架,经测试每秒可处理约60万次RPC请求,客户端单线程每秒可请求6万次(本地服务器),保证高性能与低延时。全局只有唯一的 ChronosServer提供服务,分配的timestamp保证严格单调递增,并且将已分配的值持久化到ZooKeeper上,即使发生 failover也能保证服务的正确性。

原理

chronos architecture

Chronos依赖ZooKeeper实现与HBase类 似的Leader Election机制,ChronosServer启动时将自己的信息写到ZooKeeper的Master临时节点上,如果主服务器已经存在,那么就记 录到BackupServers节点上。一旦Master临时节点消失(主服务器发生failover),所有备服务器收到ZooKeeper通知后参与 新一轮的选主,保证最终只有一个新的主服务器接替服务。

ChronosServer运行时会启动一个Thrift服务器,提供getTimestamp()和getTimestamps(int)接口, 并且保证每次返回的timestamp都是严格单调递增的。返回的timestamp与现实时间有基本对应关系,为当前Unix time乘以2的18次方(足够使用1115年),由于我们优化了性能,所以如果存在failover就不能保证这种对应关系的可靠性

ChronosClient启动时,通过访问ZooKeeper获得当前的主ChronosServer地址,连接该服务器后就可以发送 Thrift RPC请求了。一旦主服务器发生failover,客户端请求失败,它会自动到ZooKeeper获得新的主ChronosServer地址重新建立连 接。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (1)

加载中
时间戳都能整一个服务器,怪不得小米抢购这么牛。
2018/04/19 18:23
回复
举报
更多评论
暂无内容
发表于服务端专区
2020/03/08 14:16

Chronos

Overview Chronos is Airbnb's replacement for cron. It is a distributed and fault-tolerant scheduler that runs on top of Apache Mesos that can be used for job orchestration. It supports custom Mesos executors as well as the default command executor. Thus by default, Chronos executes sh (on most systems bash) scripts. Chronos can be used to interact with systems such as Hadoop (incl. EMR), even i...

0
0
发表于服务端专区
2020/01/08 23:19

聊聊chronos的MasterElection

## 序 本文主要研究一下chronos的MasterElection ## MasterElection DDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/ha/MasterElection.java ``` public class MasterElection { private static final Logger SWITCH_LOGGER = LogUtils.SWITCH_LOGGER; private static volatile ServerState state = ServerState.BACKUPING; public static void election(final CountDownLatch cdl) { final CuratorFramework cli...

0
0
发表于开发技能专区
2020/01/02 22:55

聊聊chronos的addMessage

## 序 本文主要研究一下chronos的addMessage ## addMessage DDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/services/MqPullService.java ``` public class MqPullService implements Runnable { private static final Logger LOGGER = LoggerFactory.getLogger(MqPullService.class); private static final PullConfig PULL_CONFIG = ConfigManager.getConfig().getPullConfig(); private static final Batcher ...

0
0
发表于AI & 大数据专区
2020/01/07 22:05

聊聊chronos的DeleteBgWorker

## 序 本文主要研究一下chronos的DeleteBgWorker ## DeleteBgWorker DDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/workers/DeleteBgWorker.java ``` public class DeleteBgWorker { private static final Logger LOGGER = LoggerFactory.getLogger(DeleteBgWorker.class); private static final DeleteConfig DELETE_CONFIG = ConfigManager.getConfig().getDeleteConfig(); private static final int SAVE_HOU...

0
0
发表于AI & 大数据专区
2020/01/04 10:40

聊聊chronos的BackupDB

## 序 本文主要研究一下chronos的BackupDB ## BackupDB DDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/db/BackupDB.java ``` public class BackupDB { private static final Logger LOGGER = LogUtils.BACKUP_RESTORE_LOGGER; public static final String DB_PATH_BACKUP = ConfigManager.getConfig().getDbConfig().getDbPathBackup(); public static final String DB_PATH_RESTORE = ConfigManager.getConfig(...

0
0
发表于服务端专区
2020/01/03 23:01

聊聊chronos的pullFromDefaultCFAndPush

## 序 本文主要研究一下chronos的pullFromDefaultCFAndPush ## pullFromDefaultCFAndPush DDMQ/carrera-chronos/src/main/java/com/xiaojukeji/chronos/services/MqPushService.java ``` public class MqPushService { //...... public void pullFromDefaultCFAndPush() { final long seekTimestamp = MetaService.getSeekTimestamp(); final long zkSeekTimestamp = MetaService.getZkSeekTimestamp(); // backup的seekTimesta...

0
0
发表了博客
2012/06/25 01:42

EZ-430 Chronos 的相关参数

EZ-430 Chronos 的相关参数 • 适合佩带的小巧外形使客户能够方便地进行远程开发; • TI SimpliciTI 与 BM Innovations 的 BlueRobin™ RF 协议使开发人员无需掌握 RF 专业知识,即可方便地直接建立无线链接; • 提供 3 种不同的 RF 频带(915 MHz、868 MHz 以及 433 MHz),可在全球范围内使用; • 集成型 3 轴加速器可实现运动敏感型控制,而传感器则可用于测量高度、温度以及电池电压等; • 内部 CC430 存储器可支持数据...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
1 评论
31 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部