首页 文章 精选 留言 我的

精选列表

搜索[Solon框架],共10000篇文章
优秀的个人博客,低调大师

大神告诉你如何理解微服务框架

因为MartinFowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问题具体看了。本篇描述一下微服务架构的基本概念及个人的一些理解。“微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构"---- Martin Fowler的博客 微服务的特征与界定 单体应用vs微服务架构 优点 1:提升开发交流,每个服务足够内聚,足够小,代码容易理解; 2:服务独立测试、部署、升级、发布; 3:按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;每个服务按4:需要选择HA的模式,选择接受服务的实例个数; 5:容易扩大开发团队,可以针对每个服务(service)组件开发团队; 6:提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪; 7:新技术的应用,系统不会被长期限制在某个技术栈上; 缺点 没有银弹,微服务提高了系统的复杂度;开发人员要处理分布式系统的复杂性;服务之间的分布式通信问题;服务的注册与发现问题;服务之间的分布式事务问题;数据隔离再来的报表处理问题;服务之间的分布式一致性问题;服务管理的复杂性,服务的编排;不同服务实例的管理。 Chris Richardson提出的微服务的三维扩展模型: X轴,服务实例水平扩展,保证可靠性与性能; Y轴,功能的扩展,服务单一职责,功能独立; Z轴,数据分区,数据独立,可靠性保证; 通信问题 微服务的拆分一般会带来IPC通信的问题。通信机制需要完备可靠,服务之间的通信选择应尽量单一,从两个维度对通信的模式进行划分: 第一个维度是一对一还是一对多: 一对一:每个客户端请求有一个服务实例来响应。 一对多:每个客户端请求有多个服务实例来响应。 第二个维度是这些交互式同步还是异步: 同步模式:客户端请求需要服务端即时响应,甚至可能由于等待而阻塞。 异步模式:客户端请求不会阻塞进程,服务端的响应可以是非即时的。 微服务架构认为,服务间通信应该就只有这几种模式。AC出于时延、编程模型等方面的考虑,提供了一套通信机制,业务之间的通信要按需选用。 服务的发现与注册 一般的微服务架构里都有两层API GetWay,一层是外部API GetWay,用于用户访问系统;一层是内部API GetWay,内部服务之间的API GetWay。内部API GetWay要解决的问题就是服务发现和服务注册。从这也能看出来,为什么通信的方式要尽量单一,API GetWay有一项工作就是协议转换。 微服务可能是HA主备的,也可能是LB的,怎么找到一个服务?有两种思路,客户端发现(上图),客户端去注册中心查询服务实例列表,自行选择;另一种是服务端发现(下图),添加LB模块,客户端把请求发向LB,由LB根据负载均衡策略选择服务实例; 微服务注册表的典型实现: ETCD : 是一个高可用,分布式的,一致性的,键值表,用于共享配置和服务发现。两个著名案例包括Kubernetes和Cloud Foundry。ZK: 是一个广泛使用,为分布式应用提供高性能整合的服务。Apache ZooKeeper最初是Hadoop的子项目,现在已经变成顶级项目。 微服务架构的部署 微服务架构对于部署的要求: 部署速率,Amazon与NetFlix都有千个服务,每个服务都有持续部署的要求,Amazon的服务每秒都会部署一次; 部署自动化,一切都要自动化,IaaS与PaaS解决I层与P层自动化部署,微服务有自动部署与运维工具,并实现Auto-Scaling; 部署提供基础机制,为实现分布式部署要求,部署机制一般都有资源池化、服务的生命周期来看,部署服务与服务注册是一体的; 部署的粒度: VM:部署系统管理的VM的生命周期,如当前AC的iDeploy部署,把AC部署拆分为每个VM的安装、配置与启动;这种方式粒度粗,支撑不了微服务的部署(除非一个服务占用一个VM); App:管理应用的生命周期及部署形态,生命周期分为部署、配置、启动、升级等,部署形态有主备、LB、Daemon等; Container:相比于APP,容器有更好的隔离性和移植性; 微服务:一般的微服务要么是APP,要么是Container,但AC就不是。受限于ONOS架构,我们的服务是一组feature; MS部署的解决方案: TOSCA:云应用拓扑标准,一种描述云化部署的DSL,我司主推一个标准,PaaS的部署系统和MANO用的都是TOSCA; Kubernetes:Google开源的容器管理系统,提出了Pod/Service/Labels等概念,以ETCD为中心,PaaS基于K8S开发出了我司的云化部署平台; Mesosphere:DCOS,数据中心操作系统,基于mesos实现资源池化,有自身的编排工具;分布式LAB基于DCOS的思想做出了一套部署与集群管理系统(HASEN); 微服务的划分 微服务的划分主要是保证微服务功能内聚,职责单一。一般使用DDD(Domain Drive Design)的思想与方法对微服务进行划分,这种方法有点类似于数据库ER图的划分,不断分解数据,保证关系型数据库符合原子性、冗余性的范式要求。当然,微服务的划分比数据表划分更复杂,也没有微服务范式的概念,但思想是一致的。更多的内容,请参考《领域驱动设计》这本书。 分布式一致性 有两个大的思路:全局的分布式事务;事件驱动; 分布式事务就是现在AC的思路,在设计开发中; 事件驱动,忽略了事务的概念,由每个服务在应用层面保存服务的状态,服务之间的通信使用事件机制通知;此种方法可以保证微服务间的独立性,但把问题交给了服务的设计者;具体事件驱动的案例见参考材料; 数据隔离问题 微服务之间数据隔离可以保证服务的独立升级与部署,数据隔离有三个维度: 数据表级隔离;数据表之间独立,没有外键关系; 数据库级隔离;不同服务有不同的数据库; DBMS级隔离;不同服务有不同的数据库管理系统; 一般做到数据库级隔离就可以了,服务之间的数据交换使用服务间接口。 从单体到微服务 微服务架构是一个衍生架构,都是从单体架构演化而来的。 因为微服务架构本身的复杂性,初创系统出于快速开发、快速验证的考虑,很少在一开始就使用微服务架构。加之微服务的概念在这两年才火,大型单体应用也是看到了开发与维护的成本在不断增加,才会有转型微服务的动力。因此,如何从单体到微服务是一个普遍问题。 从单体到微服务的原则: 逐步演进,不要全部重构。 全部重构,带来极大的成本和风险,系统会有很长的不稳定期。而且,最终的效果也不会很好,在设计时很难想到所有问题。微服务架构的演化思路应该是一步步铺基础设施,一点点拆分微服务。 演化建议(个人建议) 1.不要增加新的耦合; 不要有编译依赖,如直接import其它模块的类; 使用版本建议的通信方式,不要使用osgiservice,这个耦合还是很强;不要直接访问其它模块的数据表; 避免不必要的亲合性,注意特性之间的状态,如A特性访问B特性的2个请求有状态,那这两个特性实例就有亲合性; 2.前后端分离; 前后端业务分离,前端之间不会耦合,能前端做的,就放在前端; 3.独立的服务逐渐拆出; 逐步拆出功能独立的微服务,对有特殊DFX要求的微服务也可以优先拆出; DevOps与微服务架构 DevOps是09年提出来的概念,但一直没有太火。直到14年,容器与微服务架构的提出,DevOps才得到了快速的发展。DevOps不单是一个实现自动化的工具链,而是组织、流程与技术的结合。组织上强调全栈团队、团队特性专一、团队自治;技术上打通开发与运维;流程上强调端到端、可视化、灰度升级、A/B测试等。 对于DevOps,MS不是必须的,但MS为DevOps提供了最好的架构支撑,对于组织和流程的要求也是一致的。所以,也有人称MS是DevOps架构。 目前国内多家巨头都对微服务的支持投入巨大,例如腾讯云micro-service、华为云微服务云应用平台ServiceStage等等。

优秀的个人博客,低调大师

初识响应式前端框架——Vue.js

响应式编程已经渗透到很多领域中的编码中,比如RxJava,Vue.js等,当然,目的就是提高编程的效率 起因: 以前我们改变UI的时候,就需要通过Dom来操作UI元素,随着业务的增多,这种方式就显得很笨重了 比如document.getElementById('id') 因此,我们就需要一个更好的方案了 方案: React.js,Angular.js和Vue.js。 相对于Vue.js来说,Angular.js稍显复杂和笨重(毕竟vue比angular少四个字母,手动滑稽),下面我们就简单介绍一下Vue.js的基本原理和用法 基本思想: 它的思想就是通过data与view进行双向绑定,就可以实现UI和和数据的快速互动了(data发生变化,UI就会发生变化;UI发生变化,data也会发生变化),显得很简洁方便 基本原理: data和view相互通信的关键就是,基于JS的异步事件模型,简单地来说,就是有一个循环事件模型一直在跑,如果相应的事件被触发了,就可以通知到data或者view。(和Android中的Handler,Looper,Message的异步机制感觉很相似) 基本用法,如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> </div> <script> new Vue({ el: '#app', data: { message: 'Hello Vue.js!' } }) </script> </body> </html> 来看看下面的代码,很熟悉吧,就是微信小程序的编码,也是采用类似的方案: 总结: 不得不说,这种思想的确先进。 其实,在Android,iOS中,也有这种类似的方案,就是MVVM开发模式,data与UI进行绑定;不过,在Android开发中,鉴于Data一般是bean.java,与一个UI绑定后,扩展性和通用型就会打折扣,这里就不深入讨论了

优秀的个人博客,低调大师

插件化框架DL源码的简单解析

目前行业内已经有较多的插件化实现方案。本文主要对DL(DynamicLoadApk)这一个开源的侵入式插件化方案进行简单分析。因为Service组件插件化的实现逻辑和Activity大体相似,所以在这里主要用Activity来分析。 基本介绍 基本概念 1、宿主:主App,可以加载插件.2、插件:插件App.被宿主App加载的App.3、组件:对于Android来说,指的就是Android中的四大组件(Activity、Service、BroadcastReceiver、ContentProvider) 基本使用 1、PluginActivity public class MainActivity extends DLBasePluginActivity { @Override public void onCreate(Bu

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册