`
文章列表
概述   SkySchedule发布之后(详见《分布式任务调度框架--SkySchedule介绍》),已有部分用户在使用,收到一些反馈意见。比如iteye网友sxp2558发现的.properties配置文件使用了“user.name”作为key,会被系统变量“user.name”覆盖,实际取到的是“
  概述   SkySchedule是基于netty实现的分布式任务调度框架,不依赖zookeeper等其他服务。主要原理是:客户端启动时通过netty与SkySchedule服务端建立长连接,通过长连接发送心跳消息,服务端可以统计到当前存活的客户端列表,为每个客户端分配“任务编号”。通过“任务id”对“客户端总数”取模,每个客户端获取对应“任务编号”的任务,实现分布式任务调度。   该分布式任务调度适用场景   生产者:假设有一个系统时刻都在生成任务,这些任务不会立即执行,需要暂时存放到一个mysql任务表表。   任务表:每个任务以一条记录的形式存放在msyql任务表中 ...
背景:   最近在负责一个数据中心的搭建工作,业务场景较多,比如:历史、实时数据计算和查询,汇总分析数据,以及基于数据与业务相结合提供智能推荐服务。对于每个不同的业务场景,所需要存储介质以及容量都不尽相同。比如:实时数据依赖redis,历史数据依赖hbase、mysql、mongdo,用户画像数据依赖es,redis等等。如果不进行微服务化拆分,其中任何一个组件出现问题,整个数据服务工程将都会有瘫痪的风险。   面临的问题:所有功能都被柔和在一个工程里,牵一发动全身,业务扩展难度大;相互干扰,每次新业务上线不仅需要验证新功能,还需要验证以前的功能是否受影响;另外 在大促期间也不易于做 ...
  背景   京东活动系统 是一个可在线编辑、实时编辑更新和发布新活动,并对外提供页面访问服务的系统。其高时效性、灵活性等特征,极受青睐,已发展成京东几个重要流量入口之一。近几次大促,系统所承载的pv已经达到数亿级。随着京东业务的高速发展,京东活动系统的压力会越来越大。急需要一个更高效,稳定的系统架构,来支持业务的高速发展。本文主要对活动页面浏览方面的性能,进行探讨。   活动页面浏览性能提升的难点: 1. 活动与活动之间差异很大,不像商品页有固定的模式。每个页面能抽取的公共部分有限,可复用性差。 2. 活动页面内容多样,业务繁多。依赖大量外部业务接口,数据很难做到闭环。外部接 ...
java老日期处理API的诟病 Date java的时间处理类Date一直被人们所诟病,这个类无法表示日期,只能以毫秒的精度表示时间,如果想获得年、月、日等信息需要借助Calender类;另外如果通过Date的构造函数来创建Date非常别扭,比如 ...
jdk1.8对java接口的定义添加了新特性,比如可以有默认的实现方法,以及静态方法(或者称为类方法)。这里对java在jdk1.8中的相关特性,以及使用方法做个简单的总结。   接口用法以及注意事项   首先来看一个简单的例子:   public interface RenderServi
前言   ClassLoader java的类加载器,其作用就是把编译好的class文件或者jar包中对应的类的元数据加载到jvm的方法区,在堆中创建一个Class对象并返回,调用这个这个Class对象的newInstance()方法就可以创建一个指定类对应的对象。熟悉反射的朋友应该很清楚,如果再在前面加一段通过Class.forName()方法来获取Class对象的话,这其实就是java“反射”获取对象的实现过程。   Class.forName()方法会调用forName0方法,这是一个jvm实现的native方法,里有一个重要的参数就是ClassLoader对象。Class.f ...
前言   上次对计算机中的“字符集”和“编码”分别进行了总结,并指出二者之间的区别,不要搞混了,不清楚的再回到上一章看一下。今天再总结下java中是如何使用字符集(主要是Unicode字符集,其他常用字符集都只有一种编码规则),以及是如何使用utf-8
前言   最近几天在分析一个字符乱码问题,想知道对方(恶意用户 或者说是黑客)到底想做什么。最后发现对方使用了Unicode字符集进行编码,而我们日志收集端使用的是utf-8编码解码,这就导致了乱码。   不知道大家注意到没上面这段文字中出现了Unicode“字符集”和
前言   前面两篇文章中我们都是直接启动的OSGI框架(equinox),然后把所有bundle放到框架中运行。在平时开发中,由于历史原因,把整个应用都迁移到OSGI框架中 是一件很困难的事,但我们可以尝试把需要热更新的部分剥离出来 制作成bundle。然后在我们现有的web框架中嵌入一个OSGI框架,并使用这个嵌入的OSGI框架加载bundle,从而实现对程序的部分模块化。   本次demo是在一个典型的spring mvc框架下的web应用中,通过代码启动一个内嵌OSGI框架。  
  前言   前一篇文章中使用idea开发工具,并集成equinox框架展示了一个简单的OSGI多bundle搭建的demo。文中提到使用idea插件可以实现对bundle元数据的自动生成(默认方式)。其实本质上
前言   在目前流行的java开发工具中,Eclipse和Idea都占有很大的市场份额。Eclipse 3.0以后的插件就是基于OSGI开发的,理论上使用Eclipse开发OSGI模块是最佳的选择。OSGI模块开发与普通的jar包开发最大的不同就是配置模块“元数据”, 而Eclipse中提供了可视化工具进行模块元数据配置。本人比较习惯使用Idea做java开发,本次demo讲解也是基于Idea开发工具进行。   OSGI模块是在OSGI框架中运行的,要搭建自己的开发环境首先就要选择一个OSGI框架,本示例选择的是Eclipse的
前言   什么是服务,简单的说就是把一件事情交给别人去做(服务提供者),至于别人如何去 对应调用者(服务使用者)来说是不care的。在现实世界中 服务使用者(客户),只关心结果是什么,而不关心过程;比如客户点了一个芝士披萨,餐厅如何去做这个披萨客户不会去过问(过程),客户只管最后的披萨是否好吃(结果),在程序设计的世界中也是如此。   服务化或者微服务化,本质上就是对一组服务按业务进行分类封装,并进行独立部署,这是构建分布式系统的基础。服务化可以实现系统之间的解耦:核心业务逻辑都在各自系统内部完成,有些工作需要使用外部协助时,只需要根据一定协议调用外部服务即可。这种松耦合的关系,还可 ...
前言   Java模块化编程是将来发展的一种趋势,虽然JDK对模块化编程的支持来得有点晚,但jdk1.9中发布的Jigsaw(或者应该称之为JPMS)终归还是对模块化编程提供了支持。但相比于OSGI来说,JDK1.9毕竟还没有大范围商用,其模块模块化还没有被大范围验证。OSGI已经很多成熟的案例,索引要学习java的模块化编程,建议还是从OSGI开始。上一篇文章对模块层的规范进行了总结,这次继续对生命周期层进行总结。   OSGI规范在生命周期层定义一些列接口,用来定义和管理Bundle生命周期。这些API又分为两类:
前言   OSGI的精髓就是通过一个个的模块构建起整个应用系统,相对于普通开发模式而已,OSGI会强制开发人员对系统进行模块划分。因此如何对系统进行模块化的划分就显得很重要了,基本原则就是高内聚低耦合(在bundle内部高内聚,在bundle之间低耦合),每个团队负责指定的模块开发。指定好每个bundle的边界和职责,然后分别进行开发实现,这种方式非常有利于并行开发,提高工作效率。   传统的MVC开发模式一般会把系统分为Controller层、Service层、Dao层等等,每层一般会打成一个jar包。而OSGI的模块化概念一般建议以具体的业务功能进行模块划分,比如:登陆模块、a业务 ...
Global site tag (gtag.js) - Google Analytics