`
halloffame
  • 浏览: 55806 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论
文章列表
QPS是接口每秒处理成功的调用次数,RT是处理一次请求所需要的平均时间,并发量是系统能同时处理的请求数。公式:并发量 = QPS * 平均响应时间。   这3个是比较重要的性能指标,如何测试这几个指标呢,可以用工具jmeter,jmeter原生支持http,但像thrift这种rpc接口就需要自己写jmeter的扩展了,可以参考https://www.jianshu.com/p/455e57ab329a。下面不用工具,用java写了一个,主要思路是启动n个线程并发的不断的调用接口一段时间,然后统计计算成功次数,失败次数和平均响应时间,主要用了并发包里的以下几个工具类:   Cycli ...
zshop是一个nodejs写的商城系统,看完廖雪峰的《javaScript全栈教程》后,想练练手,已是开始踩坑之路。目前完成了首页,商品搜索,购物车,我的,登录,商品详情,结算等,后面将继续完善其它功能。完善后会把数据库的er图画出来。github地址:https://github.com/halloffamezwx/zshop。   在线预览效果地址:http://120.78.200.74:3000/zshop/(pc浏览器请切换为手机模式)。部署在阿里云上面,centOS 6.5 64位,1核cpu,1g内存,1m带宽,40g普通硬盘,登录手机:18312345678,密码:12 ...
在soa的架构中,假设有注册用户服务A,A做的事很简单,就是insert一条记录到user表,并且调用赠送用户积分服务B,B做的事也很简单,insert一条记录到coin表。服务A和B是分别部署在两台不同的机器,有可能发生的一种情况就是A ...
本节在《负载均衡》的基础上利用zookeeper实现服务注册与发现,ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。   基本思路就是把服务注册到zookeeper上,代理连接到zookeeper监控这些注册的服务,一旦这些服务出现变化(新增,故障,下线)就动态的构造连接池list:   这里使用的ZooKeeper的版本是3.4.10,直接在官网下载zookeeper-3.4.1 ...
本节在《代理》和《连接池》的基础上加上负载均衡,主要的思路是在代理上加上集群服务的n个连接池,客户端连接到代理上,代理转发时根据负载均衡算法选择一个合适连接池中的连接:     一般的负载均衡算法有: 1 [加权]轮询法([Weight] Round Robin), 2 [加权]随机法([Weight] Random), 3 源地址哈希法(Hash), 4 [加权]最小连接数法([Weight] Least Connections)。   这里只实现加权最小连接数法:least_conn算法很简单,首选遍历后端集群,比较每个后端的conns/weight,选取该值最小的后端 ...
这节把spring整合进Thrift,这次用maven来构建工程,maven的pom.xml加上依赖: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.apache.th ...
我们知道有些java对象比如socket,io流等是有close方法的,一般可以在finally块内调用然后释放资源,假如我们忘记调用close方法,当java gc这个对象的时候也会释放资源,不过java gc是不能确定时间的,所以最好用完了就手工close一下。   下面我们用ServerSocket的例子来证明垃圾回收是会释放内存和端口的: import java.net.ServerSocket; public class TestSocketGc { public static void main(String[] args) throws Exception { ...
WEB中我们很常见的一种部署方式是在几个tomcat前面加一个nginx做反向代理,此时的nginx有了负载均衡和路由网关的功能。nginx工作在http层,thirft服务工作在tcp层上,所以不能用nginx作为thirft服务的代理(据说nginx可以装一个插件来支持tcp层)。tcp层上的有一个开源的叫HAProxy,用成熟的开源软件有好处,受限制也比较大,本节是用3种方式实现thirft代理,可以更灵活的实现一些自定义功能等。   1 用经典的socket实现:api写起来代码比较简单,就做做转发,但是因为不解析数据协议,且read和accept是阻塞的,所以一个连接会需要两个 ...
在请求tomcat的时候,tomcat会从url或者cookie里拿sessionid。从下面源码看到先从url获取,然后再从cookie里拿,好像覆盖了,其实并不是,当cookie被浏览器禁用时,会将cookie的sessionid信息重写进url,URL重写设置sessionId或者放到cookie中传递过来,两者方式只会用一个。   org.apache.catalina.connector.CoyoteAdapter->postParseRequest   有个比较有意思的是,如果不在web.xml配置sessionid的名称,url和cookie两种方式默认的sessi ...
最近用HttpURLConnection下载一个图片的时候,下载下来死活打不开,显示文件格式已经损坏,直觉这可能是个压缩文件,于是改成用winrar打开,果不其然。 进一步查看http head的Content-Encoding,没错是gzip,浏览器发现这个gzip报文头就会自动解压,而我们自己写代码就要用GZIPInputStream来处理了。 gzip这种压缩应该对html css js那些有很好的效果,但是对大部分格式的图片没什么卵用,压缩是要服务器付出代价的。   这地址上有gzip压缩各种格式图片的测试结果:http://www.webkaka.com/blog/archi ...
java用HttpServletRequest取得http请求体 import java.io.IOException; import javax.servlet.http.HttpServletRequest; public class HttpUtil { public static byte[] getRequestPostBytes(HttpServletRequest request) throws IOException { int contentLength = request.getContent ...
Apache Thrift本身没有提供连接池,我们可以用Apache Commons Pool来实现一个,Apache commons-pool本质上是"对象池",即通过一定的规则来维护对象集合的容器;commos-pool在很多场景中,用来实现连接池/任务worker池等,大家常用的dbcp数据库连接池,也是基于commons-pool实现的。TCP连接池里的是Socket对象,那么对于thirft连接池里的就是TTransport对象了。   参考了这篇文章:http://www.open-open.com/lib/view/open1415453575730.h ...
在上一节Apache Thrift 初学小讲(二)【一个简单示例】中client端提到http类型的transport,但是并没有给出相应的服务端实现。 本节主要写一个transport为http的例子,以java为例,server端thrift提供了一个类TExtensibleServlet,只需要写一个servlet继承这个类,并实现以下抽象方法即可:   protected TProtocolFactory getInProtocolFactory();//in通信协议 protected TProtocolFactory getOutProtocolFactory();//o ...
一 简介:        Apache Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器,现在是 Apache 基金会的顶级项目,对于当时的facebook来说创造thrift是为了解决facebook系统中各系统间大数据量的传输通信以及系统之间语言环境不同需要跨平台的特性,所以thrift可以支持多种程序语言:C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml, Delphi等。         ...
一 生成代码 首先写一个接口定义文件ThriftTest.thrift,里面定义了一个User的struct和一个getUser接口,以java为例,cmd执行命令thrift --gen java ThriftTest.thrift,成功后会在ThriftTest.thrift文件所在的目录生成一个gen-java的文件夹,里面包含 ...
Global site tag (gtag.js) - Google Analytics