有何不同

 

eight是一种适应于企业私有化环境的框架,她被设计用于构建企业内部日趋复杂和庞大、处理能力和数据量不断增长的系统。她比之现有的其它技术手段有着显著的优势。

简单的部署和运行环境

eight被用来构建大规模的集群系统。通常此类系统往往需要企业提供较为复杂的基础平台,比如常见的使用k8s和istio、mesos等,就需要企业在私有云上进行较大的基础设施的投资,即便退而求其次使用spring cloud一类的非云化解决方案,企业也需要为各种服务的搭建、运行和维护做出较多的投入。这都是企业业务之外的额外代价,这都意味着人力物力的长期持续消耗。

eight无论是仅运行单个节点,还是扩展至数以千计节点规模的集群,其实施和维护环境都极为简单干净。

运行一个eight节点仅需要一台部署了jvm的设备(目前支持java 1.6及以上的jvm环境,部分可选模块会有更高的版本要求),启动一个节点仅需要执行一行命令,没有额外的要求。

启动eight

同样的,我们可以在成百上千的设备上运行计算节点,无须jvm以外的任何依赖,也不必对各个节点做复杂的配置。这些节点启动后只是一个个待机的底座,可以在这些节点上随时发布、更新、调整和卸载各种模块和系统。而集群发布的方式也是多种多样,常见的是在集群启动参数里设置一个可网络访问的共享存储位置,系统模块和配置发布到存储上则系统将被集群所加载和配置,对存储中的模块和配置进行修改或清除,则集群中运行的系统随之实时的更新或卸载。

以下是更新一个目录同时影响多个运行底座的示例。 集群更新

常用的共享存储诸如memcache或redis,也可以是gfs之类的网络文件系统。也就是说,一个企业要运行eight集群,通常只需要配置一套redis(建议配置容灾模式),然后在各个用于集群的设备上启动服务。之后的各种系统配置、部署、迭代和卸载,均集中在存储系统中。企业通常不必去配置和维护各个节点上的服务,集群具备自我发现和管理的能力,各个节点则能保持持续不断的运行,动态的自我更新。 集群部署

这对于基础设施存在匮乏的诸多企业而言,无疑是相当友好的。

轻便的加载和更新方式

docker之类的容器化技术,它们对于大型系统的划分是以服务为单位,重载和更新是进程的重启和调度,通常会带来数秒至数分钟的服务启停间断。如果是openstack之类的硬件虚拟化技术,更新则会更长一点。当然也可以采用灰度更新或临时扩容来应对,但这通常意味着某段时间计算资源突发减少或临时提供更多的资源。

eight更新的粒度则是代码模块级别上,其进程是从不重启的,加载和更新仅仅只是对一段代码模块的载入。更新仅限于细粒度的局部,这个过程通常在数毫秒至数十毫秒内执行完毕,这对于正在运行的系统几乎是无感的。

下面的例子里,第一次接口调用输出的数据格式是json(左下角处),而在数据格式化模块被替换后,第二次调用请求就即时输出了不同的结果(xml格式)。 格式变换

对于日渐盛行的企业实时数据计算而言,能够确保系统在不间断运行的的同时跟随业务变化而平稳更新,同时不会造成系统波动和资源冲击,是一件具有重要意义的事情。

系统的监控和管理

eight与k8s这类容器技术的监控不同,k8s的监控管理是面向服务的,获取的信息大都是服务的状态、资源的消耗、网络流量状况之类的集群环境信息。eight则深入代码与业务之中,不仅能够获取状态和资源这类粗粒度信息,也能获取具体到某个模块,某个接口或者某段代码的执行情况、调用方式、统计数据等。

如下面的例子里,统计了不同模块的调用次数。 系统监控

eight监控模块的控制管理能力同样强大,通过它,可以对具体到某一个节点中运行的某一个模块进行参数设置和调整,来实时调整系统的状态;也能够对运行着的系统进行在线debug和分析,以跟踪实际生产环境的运行错误和排除故障;当然也还有模块更新、重载,业务的调度、熔断等各种能力。

下面的例子里,通过修改formatter模块参数动态调整了业务,影响了系统的输出格式。 参数调整

对于需要不断跟踪数据变化,分析系统运行情况和优化参数改善系统性状的业务而言,这无疑是个福音。

远程的部署、更新、监控和管理

eight以上的运行和管理能力,均可以通过安全的通道,远程的操作和进行。这意味着部署于某一地的计算集群受控于另一地的维护和管理。对于企业而言,将分布于各地的各种系统进行集中化生产、部署、调试、监控和维护,能够大大提升系统质量,同时减少人力物力成本。

另一方面,这也意味着企业在缺乏足够的技术储备或资源预算时,能够将私有化系统的开发、部署和运维外包给专业的技术公司,使系统与数据都运行于内部,而研发、更新和维护则移交给远程的外部。以更低的成本来兼顾业务安全和服务质量的考量。 远程管理

更多

不仅如此,跟随着后面的旅程,你会发现,eight能够带来的还有更多。

  • 更棒的软件开发组织方式,能够大大提升开发效率和开发质量
  • 更为健壮和高质量的模块,并且这些模块的可复用性大大提高,让使用者很容易积累技术资产
  • 对系统的修改和调整变得代价低廉,无论这种代价来自于开发还是部署和运维
  • 更少的服务、更少的网络带宽、更少的cpu和内存,运行时更少的外部依赖系统也更为稳定
  • 更为灵活的系统分配和实施方式,更大程度的利用已有资源
  • … …

这一切,是不是很cool?