架构
code楠
掌握了禅机的程序员也就掌握了生命。这样的程序员是以一种永不疲倦的童稚的欢乐来看待这个世界的。
展开
-
通过Spring Session实现Session集中管理
随着企业级JAVA应用的发展,目前这个领域已经出现了很大的革新,现代的发展趋势是微服务以及可水平扩展的原生云应用(Cloud native application)。在这样的发展趋势下,过去所使用的Session管理器的不足就暴露了出来。 Spring Session为企业级JAVA应用的Session管理带来了革新,使得以下功能更加容易实现:转载 2017-09-14 16:20:09 · 471 阅读 · 0 评论 -
使用Websphere的TPTP工具进行性能分析和监控
Websphere提供了一个TPTP(Test & Performance Tools Platform)工具,最新版本为4.5.0,可以进行强大的性能测试和分析工具,利用它,我们可以分析java代码的内存泄露分析、查找性能瓶颈、以及定位线程死锁等。一、准备工作1、下载TPTP工具Websphere提供了一个TPTP Eclipse插件,可以到下面的网站进行下载。h转载 2017-09-14 16:18:45 · 1074 阅读 · 0 评论 -
静态分派与动态分派
方法解析 Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析。这在前面的“Java内存区域转载 2017-08-01 12:05:20 · 274 阅读 · 0 评论 -
dubbo源码 编译 测试
Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。项目主页:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm项目源码:https://gi转载 2017-07-19 11:51:44 · 540 阅读 · 0 评论 -
java Service Provider Interface 简单示例
SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现,描述给JDK知道就行啦(通过改一个文本文件即可) 公司内部,目前Dubbo框架就基于SPI机制提供扩转载 2017-07-17 18:10:45 · 531 阅读 · 0 评论 -
软件架构模式
分层架构 (Layered Architecture)分层架构是最常见的架构,也被称为n层架构。多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师、开发者和软件设计者所熟知。比如MVC。分层架构的一个特性就是关注分离(separation of concerns)。在层中的组件只负责本层的逻辑。组件的划分很容易让它们实现自己的角色和职责转载 2017-07-17 16:58:34 · 440 阅读 · 0 评论 -
SPI API
从面向接口编程说起我们在“调用方”和“实现方”之间引入了“接口”,上图没有给出“接口”应该位于哪个“包”中,从纯粹的可能性上考虑,我们有三种选择:“接口”位于“调用方”所在的“包”中。“接口”位于“实现方”所在的“包”中。“接口”位于独立的“包”中。下面让我们依次分析这三种可能性,如果现实中确实有这种可能性,不如我们就为其起个名字以方便交流。“接口”位于“调转载 2017-07-17 15:44:57 · 496 阅读 · 0 评论 -
服务降级
服务降级,当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。服务降级方式:服务接口拒绝服务:无用户特定信息,页面能访问,但是添加删除提示服务器繁忙。页面内容也可在Varnish或CDN内获取。 页面拒绝服务:页面提示由于服务繁忙此服务暂停。跳转到varnish或nginx的一个静态页面。转载 2017-07-17 14:25:01 · 378 阅读 · 0 评论 -
c10k问题
所谓c10k问题,指的是服务器同时支持成千上万个客户端的问题,也就是concurrent 10 000 connection(这也是c10k这个名字的由来)。由于硬件成本的大幅度降低和硬件技术的进步,如果一台服务器同时能够服务更多的客户端,那么也就意味着服务每一个客户端的成本大幅度降低,从这个角度来看,c10k问题显得非常有意义。为了解决C10K问题,有各种各样的IO策略,它们的分歧或转载 2017-07-17 11:19:42 · 849 阅读 · 0 评论 -
Declarative Caching Services for Spring声明式缓存服务
摘要 可伸缩性、可靠性和高性能是现代J2EE应用程序所必须具有的特性。无论客户端属于哪种类型,其请求处理通常包含一些对性能有负面影响的活动,例如从异构数据源收集信息和执行复杂计算等。缓存是用于提升企业应用程序性能的最重要的做法之一。每一个应用程序都有自己的缓存要求,必须经常加以调整,才能确保不会发生性能衰退。企业应用程序需要找到一种方式,在不触及应用程序代码的情况下轻松添加和调优缓存功能转载 2017-07-13 18:05:24 · 313 阅读 · 0 评论 -
spring 事务JDBCTransaction JTATransaction CMTTransaction
java事务实现世界可分为两种一种是jdbc事务,也叫本地事务,令外一种是JTA事务,也叫全局事务。简要介绍下JTA APIjavax.transaction.Status JTA事务状态,使用方式 常被作为判断条件做处理javax.transaction.Synchronization 定义了事务完成前后改做的事,使用方式一般是先注册,在适当的时机调javax.trans转载 2017-06-12 14:18:33 · 2172 阅读 · 0 评论 -
数据源,连接池,数据库连接之间的关系
关于这个问题,我们首先要弄清楚数据库软件mysql(sql server也行举个例子)和其里面的一个具体的数据库实例之间的区别和关系。 mysql即我们平常所说的数据库软件,在这个软件里可以创建很多个数据库实例,例如:samples;information;jarvan等具体的数据库实例。每一个数据库实例里面包含多张table,多个存储过程,多个索引,多个约束等,转载 2017-06-12 17:27:11 · 813 阅读 · 0 评论 -
spring 事务 FlushMode属性的理解
FlushMode属性与transaction(spring注入的事务)一、参见hibernate的apihttp://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10http://tool.oschina.net/apidocs/apidoc?api=hibernate-4.1.4说明:贴出两转载 2017-06-12 16:47:38 · 2665 阅读 · 0 评论 -
dubbo源码编译和打包
本文以dubbo2.4.11源码编译和打包例dubbo官网:http://dubbo.io/源码:https://github.com/alibaba/dubbo用户指南:http://dubbo.io/User+Guide-zh.htm开发指南:http://dubbo.io/Developer+Guide-zh.htm按官方说明2.4.X是GA稳定版本,去https转载 2017-09-07 17:43:08 · 3848 阅读 · 0 评论 -
详解Spring事件驱动模型
事件驱动模型简介事件驱动模型也就是我们常说的观察者,或者发布-订阅模型;理解它的几个关键点:首先是一种对象间的一对多的关系;最简单的如交通信号灯,信号灯是目标(一方),行人注视着信号灯(多方);当目标发送改变(发布),观察者(订阅者)就可以接收到改变;观察者如何处理(如行人如何走,是快走/慢走/不走,目标不会管的),目标无需干涉;所以就松散耦合了它们之间的关系。转载 2017-10-19 16:47:20 · 245 阅读 · 0 评论 -
SSLSocket的使用
1. 什么是SSLSocketJDK文档指出,SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字。这种套接字是正常的流套接字,但是它们在基础网络传输协议(如TCP)上添加了安全保护层。具体安全方面的讨论见下一篇。本篇重点关注SSLSocket及相关几个类的使用。 2. SSLSocket和相关类SSLSocket来自jsse(Java Secure转载 2017-12-18 15:25:52 · 20297 阅读 · 1 评论 -
eclipse 设置 jvm参数
Eclipse设置JVM的内存参数打开Eclipse 或者 MyEclipse 打开 Windows -> Preferences -> Java -> Installed JREs 选中你所使用的 JDK,然后点击 Edit,会出现如下图: 在 Default VM Arguments输入框内输入: -Xms512m转载 2017-11-25 10:21:30 · 2251 阅读 · 0 评论 -
项目分层 facade service
面向对象有一个Facade设计模式,中文就是封装模式,Facade层很有必要,可以将类之间复杂的关系封装起来,从而使上层容易去调用,实现良好的封装效果。如果有更大Service的之间的复杂调用,考虑在service上再加Facade层。转载 2017-12-21 10:19:46 · 6529 阅读 · 0 评论 -
利用ThreadLocal模式管理Session
在利用Hibernate开发DAO模块时,我们和Session打的交道最多,所以如何合理的管理Session,避免Session的频繁创建和销毁,对于提高系统的性能来说是非常重要的,以往是通过eclipse的插件来自动完成这些代码的,当然效果是不错的,但是总是觉得不爽(没有读懂那些冗长的代码),所以现在打算自己实现Session管理的代码。 我们知道Session是由SessionFac转载 2017-12-20 17:07:39 · 719 阅读 · 0 评论 -
Spring cache基本使用
缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存。本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 cache 配置方法,展现了 spring cache 的强大之处,然后介绍了其基本的原理,扩展点和使用场景的限制。通过阅读本文,你应该可以短时间内掌握 spring 带来的强大缓存技术,在很少的配置下即可给既有代码提转载 2017-12-20 11:16:17 · 335 阅读 · 0 评论 -
java 服务降级开关设计思路
java 服务屏蔽开关系统,可以手工降级服务,关闭服务 基于spring AOP机制,可以在特殊情况下屏蔽相关service类的某些返回,并且支持定义默认返回结果,随机屏蔽某些异常服务。 通过启动一个内置的http server来监听外部指令。对当前应用的影响。代码请查看 https://github.com/zhwj184/autoswitch使用指南:1.在sp转载 2017-11-16 17:21:36 · 1976 阅读 · 0 评论 -
分布式集群系统下的高可用session解决方案
目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制。 目前,在集群系统下实现session统一的有如下几种方案:(1) 应用服务器间的session复制共享(如tomcat session共享)(2) 基于cache DB缓存的session共享应用服务器间的ses转载 2017-11-16 10:38:17 · 281 阅读 · 0 评论 -
秒杀系统架构分析与实战
https://www.cnblogs.com/andy-zhou/p/5364136.html1 秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;2 秒杀技术挑战假设某转载 2017-11-17 14:26:32 · 203 阅读 · 0 评论 -
电商秒杀架构 各个具体场景及对应的解决方案
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西。然而,从技术的角度来说,这对于Web系统是一个巨大的考验。当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要。这次我们会关注秒杀和抢购的技术实现和优化,同时,从技术层面揭开,为什么我们总是不容易抢到火车票的原因? 一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,转载 2017-11-17 14:21:00 · 4578 阅读 · 1 评论 -
inputStream类中的mark()方法含义
mark就像书签一样,在这个BufferedReader对应的buffer里作个标记,以后再调用reset时就可以再回到这个mark过的地方。mark方法有个参数,通过这个整型参数,你告诉系统,希望在读出这么多个字符之前,这个mark保持有效。读过这么多字符之后,系统可以使mark不再有效,而你不能觉得奇怪或怪罪它。这跟buffer有关,如果你需要很长的距离,那么系统就必须分配很大的buffer来转载 2017-07-03 11:56:51 · 1907 阅读 · 0 评论 -
在spring中获取代理对象代理的目标对象工具类
问题描述:: 我现在遇到个棘手的问题,要通过spring托管的service类保存对象,这个类是通过反射拿到的,经过实验发现这个类只能反射取得sservice实现了接口的方法,而extends类的方法一律不出现,debug后发现这个servie实例被spring替换成jdkdynmicproxy类,而不是原始对象了,,它里面只有service继承的接口方法,而没有extends 过转载 2017-06-22 18:41:57 · 474 阅读 · 0 评论 -
BeanFactory FactoryBean Spring
1、 BeanFactory BeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是Spring IOC 所遵守的最底层和最基本的编程规范。在 Spring 代码中, BeanFactory 只是个接口,并不是 IOC容器的具体实现,但是 Spring 容器给出了很多种实现,如 DefaultListableBeanFactor转载 2017-03-14 15:17:14 · 276 阅读 · 0 评论 -
spring 无状态 bean
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。 无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有转载 2017-04-07 16:10:47 · 579 阅读 · 0 评论 -
java synthetic关键字
有synthetic标记的field和method是class内部使用的,正常的源代码里不会出现synthetic field。小颖编译工具用的就是jad.所有反编译工具都不能保证完全正确地反编译class。所以你不能要求太多。 下面我给大家介绍一下synthetic 下面的例子是最常见的synthetic field Java代码class parent {转载 2017-03-28 17:42:36 · 854 阅读 · 0 评论 -
AccessController.doPrivileged
AccessController.doPrivileged是一个在AccessController类中的静态方法,允许在一个类实例中的代码通知这个AccessController:它的代码主体是享受"privileged(特权的)",它单独负责对它的可得的资源的访问请求,而不管这个请求是由什么代码所引发的。这就是说,一个调用者在调用doPrivileged方法时,可被标识为 "特权"。在做转载 2017-03-28 11:47:00 · 878 阅读 · 0 评论 -
spring 源代码 循环依赖
在使用spring的场景中,有时会碰到如下的一种情况,即bean之间的循环引用。即两个bean之间互相进行引用的情况。这时,在spring xml配置文件中,就会出现如下的配置:12bean id='beanA' class='BeanA' p:beanB-ref='beaB'/>bean id='beanB' class='BeanB' p:b转载 2017-03-10 16:15:09 · 631 阅读 · 0 评论 -
meta标签 spring meta
meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是descripti转载 2017-03-08 11:39:08 · 3271 阅读 · 0 评论 -
负载均衡介绍
负载均衡是什么负载均衡是什么 负载均衡(Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。 负载均衡(又称为负载分担),英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作转载 2017-02-23 09:52:54 · 682 阅读 · 0 评论 -
spring配置文件头部xmlns配置 详细解释
1234567891011121314151617<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2转载 2017-03-02 15:59:05 · 2925 阅读 · 0 评论 -
org.w3c.dom(java dom)解析XML文档
位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效果可能会不理想首先来了解点Java DOM 的 API:1.解析器工厂类:DocumentBuilderFactory创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstanc转载 2017-03-02 10:50:50 · 3256 阅读 · 0 评论 -
spring EntityResolver XmlBeanDefinitionReader的一个属性
1.1 何为 EntityResolver :官方解释: 如果SAX应用程序叙事实现自定义处理外部实体,则必须实现此接口,并使用setEntityResolver方法向SAX 驱动器注册一个实例.也就是说,对于解析一个xml,sax首先会读取该xml文档上的声明,根据声明去寻找相应的dtd定义,以便对文档的进行验证,默认的寻找规则,(即:通过网络,实现上就是声明转载 2017-02-10 18:41:41 · 682 阅读 · 1 评论 -
spring profile的基本使用
本地、测试、开发、产品等不同环境文件配置现象 如果在开发时进行一些数据库测试,希望链接到一个测试的数据库,以避免对开发数据库的影响。 开发时的某些配置比如log4j日志的级别,和生产环境又有所区别。 各种此类的需求,让我希望有一个简单的切换开发环境的好办法。解决 现在spring3.1也给我们带来了profile,可以方便快速的切换环转载 2017-02-07 16:58:40 · 575 阅读 · 0 评论 -
ApplicationContextAware接口
开源框架 spring ApplicationContextAware接口转载 2016-12-27 16:56:48 · 329 阅读 · 0 评论 -
spring-security之ChannelProcessingFilter
字母“s”是Internet上最重要的字母。任何一个在Web上冲浪超过五分钟的人都知道绝大多数Web页面均与以“http://”打头的URL相关联。那是因为绝大多数Web页面都通过HTTP协议被请求和发送。对于绝大多数页面来说,HTTP完全够用,但是当有秘密信息在Internet上四处传输时就不够用了。通过HTTP发送的信息很容易被无法无天的黑客截获和读取,并被用于他们的恶意计划。转载 2017-01-04 11:57:05 · 759 阅读 · 0 评论 -
使用Eclipse上传/下载Git项目
前提:Eclipse已安装EGit插件已拥有GitLab / GitHub / 其它Git托管服务账号SSH方式配置配置Git信息配置用户信息Eclipse,选择菜单:Preferences > Team > Git > Configuration > User Settings > Add Entry..Key: user.name,转载 2017-03-16 10:00:00 · 794 阅读 · 0 评论