好运飞艇平台客服_通过案例了解Hystrix的各种基本使用方式

  • 时间:
  • 浏览:0
  • 来源:吉林新闻网_吉林主流媒体_吉林门户网站

 1 通过什儿 算术题了解系统处于错误的概率

    我们都我们都 一般用每秒查询率(Query Per Second,简称QPS)来衡量有另另一个 网站的流量,QPS是指一台服务器在一秒还前要解决的查询次数,它还前要被用来衡量服务器的性能。

    假设有另另一个 Web应用有20个基于微服务的子模块,比如某电商系统里有订单、合同管理和会员管理等子模块,该系统的平均QPS是800,也也不 说平均每秒有800个访问量,什儿 数值属于中等水平,何必 高。

    算术题一,请计算每天的访问总量?注:一般网站在夜里1点到上午9点的访问量比较少,所以计算时按每天16个小时算。

    答:800*80*80*16=57800000=5.76乘以10的8次方。

    算术题二:机会该系统含有20个子模块,在解决每次请求时,该模块有99.9999%的概率沒有错(百万分之一的出错概率,什儿 概率很低了),而任何有另另一个 模块出错,整个系统就出错,没办法 问题图片是,每小时该系统出错的概率是哪几个?每天(按16小时算)是哪几个?每月(按80天算)又是哪几个?

    答:针对每次访问,有另另一个 模块正常工作的概率是99.9999%,没办法 每小时20个模块有的是出错的概率是99.9999%的(20*3800)次方,大约是93%,换句话说,在有另另一个 小时内,该系统出错的概率是7%。

    我们都我们都 再来算每天的正常工作概率,是93%的16次方,大约是31%,换句话说,每天出错的概率高达69%。同理我们都我们都 能算出,每月出错的概率高达95%。

    通过这组数据,我们都我们都 能看完,规模尚属中等的网站(大约尚能正常盈利不亏本的网站)平均每月就会出現一次故障,对于哪几种模块故障率高于百万分之一或平均QPS更高的网站,什儿 出故障周期会更频繁,所以说,对于互联网公司而言,服务容错组件是必配,而有的是优化项。

2 准备服务提供者

    这里我们都我们都 将在HystrixServerDemo项目里,提供有另另一个 供Hystrix调用的服务,其含有另另一个 是可用的,而在另外有另另一个 服务里,是通过sleep机制,故意让服务延迟返回,从而造成不可用的后果。

    这是有另另一个 基本的Spring Boot的服务,完后 累似 的博文里我们都我们都 机会反复讲述过,所以这里仅给出实现要点,具体信息请我们都我们都 此人 参照代码。

    要点1,在pom.xml里引入spring boot的依赖项,关键代码如下。    

1    <dependency>
2        <groupId>org.springframework.boot</groupId> 
3        <artifactId>spring-boot-starter-web</artifactId> 
4        <version>1.5.4.RELEASE</version> 
5    </dependency>

    要点2,在ServerStarter.java里,开启服务,代码如下。      

1    //省略必要的package和import代码
2    @SpringBootApplication
3    public class ServerStarter{
4        public static void main( String[] args )
5        {      SpringApplication.run(ServerStarter.class, args); }
6    }

    要点3,在控制器Controller.java里,编写有另另一个 提供服务的最好的法律依据,代码如下。    

1    @RestController
2    public class Controller {        
3        @RequestMapping(value = "/available", method = RequestMethod.GET    )
4        public String availabieService() 
5        { return "This Server works well."; }
6        
7        @RequestMapping(value = "/unavailable", method = RequestMethod.GET    )
8        public String unavailableServicve () {
9            try { Thread.sleep(8000); } 
10            catch (InterruptedException e) 
11            { e.printStackTrace(); }
12            return "This service is unavailable.";
13        }
14    }

    其中在第3行提供了有另另一个 可用的服务,在第8行的unavailableServicve的服务里,是通过第9行的sleep最好的法律依据,造成“服务延迟返回”的效果。

3 以同步最好的法律依据调用正常工作的服务

    这里我们都我们都 新建有另另一个 HystrixClientDemo项目,在其中开发各种Hystrix调用服务的代码。

在什儿 项目里,我们都我们都 将通过Ribbon和Hystrix结合的最好的法律依据,调用在上次要里提供的服务,所以在pom.xml文件里,我们都我们都 将引入这两次要的依赖包,关键代码如下。    

1    <dependencies>    
2        <dependency>
3                <groupId>com.netflix.ribbon</groupId>
4                <artifactId>ribbon-httpclient</artifactId>
5                <version>2.2.0</version>
6        </dependency>
7         <dependency>
8                <groupId>com.netflix.hystrix</groupId>
9                <artifactId>hystrix-core</artifactId>
10                <version>1.5.12</version>
11        </dependency>
12      </dependencies>

    在上述代码的第2到第6行里,我们都我们都 引入了Ribbon的依赖项,从第7到第11里,我们都我们都 引入了Hystrix的依赖项。

    在NormalHystrixDemo.java里,我们都我们都 将演示通过Hystrix调用正常服务的开发最好的法律依据,代码如下。    

1    //省略必要的package和import代码
2    //继承HystrixCommand<String>,所以run最好的法律依据返回String类型对象
3    public class NormalHystrixDemo extends HystrixCommand<String> {
4        //定义访问服务的有另另一个



对象
5        RestClient client = null;
6        HttpRequest request = null;
7        //在构造函数里指定命令组的名字 
8        public NormalHystrixDemo() {
9       super(HystrixCommandGroupKey.Factory.asKey("demo"));
10        }
11        //在initRestClient最好的法律依据里设置访问服务的client对象
12        private void initRestClient() {
13            client = (RestClient) ClientFactory.getNamedClient("HelloCommand");
14            try {
15                request = HttpRequest.newBuilder().uri(new URI("/available")).build();
16            } catch (URISyntaxException e) 
17             { e.printStackTrace(); }
18        ConfigurationManager.getConfigInstance().setProperty(    "HelloCommand.ribbon.listOfServers", "localhost:8080");
19        }

    在第12行的initRestClient最好的法律依据里,我们都我们都 做好了以基于Ribbon的RestClient对象访问服务的准备工作,具体而言,在第13行里通过工厂初始化了client对象,在第18行,设置了待访问的url,在第15行,设置了待访问的服务名。    

20        protected String run() {
21            System.out.println("In run");
22            HttpResponse response;
23            String result = null;
24            try {
25                response = client.executeWithLoadBalancer(request);
26                System.out.println("Status for URI:" + response.getRequestedURI()+ " is :" + response.getStatus());
27                result = response.getEntity(String.class);
28            } catch (ClientException e) 
29            { e.printStackTrace();} 
80           catch (Exception e) {    e.printStackTrace();    }
31            return "Hystrix Demo,result is: " + result;
32        }

    我们都我们都 在第20行定义了返回String类型的run最好的法律依据, 这里的返回类型前要和第3行里本类继承的HystrixCommand对象的泛型一致。在其中,我们都我们都 是通过第25行的代码调用服务,并在第31行,返回有另另一个 包括调用结果的String字符串。    

public static void main(String[] args) {
34            NormalHystrixDemo normalDemo = new NormalHystrixDemo();
35            //初始化调用服务的环境
36            normalDemo.initRestClient();
37            // 睡眠1秒
38            try {Thread.sleep(800);} 
39            catch (InterruptedException e) 
40            {e.printStackTrace();    }
41            //调用execute最好的法律依据后,会自动地执行定义在第20行的run最好的法律依据
42            String result = normalDemo.execute();
43            System.out.println("Call available function, result is:" + result);
44        }
45    }

    在main最好的法律依据里,我们都我们都 指定了如下的工作流程。

    第一步,在第36行里,通过调用initRestClient最好的法律依据完成了初始化的工作。

    第二步,在第42行里执行了execute最好的法律依据,什儿 最好的法律依据是封放进 HystrixCommand最好的法律依据里的,一旦调用,则会触发第20行的run最好的法律依据。

    请注意,这里一旦执行execute最好的法律依据,则会立即(即以同步的最好的法律依据)执行run最好的法律依据,在run最好的法律依据返回结果完后 ,代码是会阻塞在第42行的,即不想继续往后执行。

    第三步,在第20行的run最好的法律依据里,我们都我们都 以localhost:8080/available的最好的法律依据调用了服务端的服务。

    执行本段代码,会看完如下的打印一段话,哪几种打印一段话很好地验证了上述讲述的过程流程。    

1    In run
2    Status for URI:http://localhost:8080/available is :80
3    Call available function, result is:Hystrix Demo,result is: This Server works well.

4 以异步的最好的法律依据调用服务

    在上次要的Hystrix案例中,请求是被依次执行,在解决完上个请求完后 ,后有另另一个 请求处于阻塞等待英文情形,什儿 Hystrix同步的解决最好的法律依据适用于并发量一般的场景。

    但单台服务器的负载解决能力毕竟是有限的,机会并发量高于(或远远高于)什儿 极限时,没办法 我们都我们都 就得考虑采用Hystrix基于异步的保护机制,从下图里,我们都我们都 能看完基于异步解决的效果图。 

    从上图里我们都我们都 能看完,请求有的是被同步地立即执行,也不 被放进 去去到有另另一个 队列(queue)中,封放进 HystrixCommand的解决代码是从queue里背熟请求,并以基于hystrix保护最好的法律依据的最好的法律依据解决该请求。在下面的AsyncHystrixDemo.java里,我们都我们都 将演示hystrix异步执行的最好的法律依据。   

1    //省略必要的package和import代码
2    //这里同样是继承HystrixCommand<String>类
3    public class AsyncHystrixDemo extends HystrixCommand<String> {
4        RestClient client = null;
5        HttpRequest request = null;
6        public AsyncHystrixDemo() {
7            // 指定命令组的名字
8    super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
9        }
10        private void initRestClient() {
11            client = (RestClient) ClientFactory.getNamedClient("AsyncHystrix");
12            try {
13                request = HttpRequest.newBuilder().uri(new URI("/available")).build();
14            } 
15            catch (URISyntaxException e) 
16            {    e.printStackTrace();    }
17        ConfigurationManager.getConfigInstance().setProperty(
18                    "AsyncHystrix.ribbon.listOfServers", "localhost:8080");
19        }
20        protected String run() {
21            System.out.println("In run");
22            HttpResponse response;
23            String result = null;
24            try {
25                response = client.executeWithLoadBalancer(request);
26                System.out.println("Status for URI:" + response.getRequestedURI() + " is :" + response.getStatus());
27                result = response.getEntity(String.class);
28            } 
29            catch (ClientException e) {e.printStackTrace(); } 
80            catch (Exception e) { e.printStackTrace();    }
31            return "Hystrix Demo,result is: " + result;
32        }

    在上述代码的第6行里,我们都我们都 定义了构造函数,在第10行里,定义了初始化Ribbon环境的initRestClient最好的法律依据,在第20行里,定义了执行hytrix业务的run最好的法律依据。这有另另一个 最好的法律依据和刚才讲到的NormalHystrixDemo类里很累似 ,所以就不再完全讲述。    

33        public static void main(String[] args) {
34            AsyncHystrixDemo asyncDemo = new AsyncHystrixDemo();
35            asyncDemo.initRestClient();
36            try {    Thread.sleep(800);} 
37            catch (InterruptedException e) 
38            {    e.printStackTrace();    }
39             //上述代码是初始化环境并sleep 1秒
40            //得到Future对象  
41            Future<String> future = asyncDemo.queue();
42            String result = null;
43            try {
44                System.out.println("Start Async Call");
45                 //通过get最好的法律依据以异步的最好的法律依据调用请求
46                result = future.get();
47            } catch (InterruptedException e) 
48              { e.printStackTrace();} 
49             catch (ExecutionException e) 
80           {     e.printStackTrace();    }
51            System.out.println("Call available function, result is:" + result);
52        }
53    }

    在main函数的34到38行,我们都我们都 同样是初始化了Ribbon环境,这和完后 的NormalHystrixDemo类的做法是一样的。

    在第41行里,我们都我们都 通过queue最好的法律依据,得到了有另另一个 含有调用请求的Future<String>类型的对象,而在第46行里,我们都我们都 是通过future对象的get最好的法律依据执行请求。

    这里有有另另一个 看点,第一,在执行第46行的get最好的法律依据后,HystrixComman会自动调用定义在第20行的run最好的法律依据,第二,这里得到请求对象是在第41行,而调用请求则在46行,也也不 说,并有的是在请求到达时就立即执行,也不 通过异步的最好的法律依据执行。

    本次要代码的执行结果和NormalHystrixDemo.java是一样的,所以就不再给出了。   

本文中的文字和代码谢绝转载。

猜你喜欢

秒秒飞艇规则_ 雷雨天如何保护家电免受雷击

记得在小时候 ,每逢遇到雷雨天气,爸妈总会当当一帮秒秒飞艇规则人 歌词 当当一帮人 关掉电视机、电脑等家电,其实很不情愿,但为了外理电器遭受雷秒秒飞艇规则击造成损坏,当当

2020-06-02

秒速pk10手机版 _胡歌靳东看球姿势超呆萌 两人都拿下巴抵着玻璃挡板

9月28日晚上,胡歌和靳东相约一起到赛场观看后一场精彩绝伦的网球比赛。当天胡歌穿着一身白色夹克,梳着大背头,而靳东则浅蓝色T恤搭配黑色休...9月28日晚上,胡歌和靳东相约一起

2020-06-02

大发快3猜大小诀窍_有声音频APP完成市场培育

伴随着移动互联网的快速发展,国内电信网络提速降费不断推进,用户获取信息最好的措施从文字大发快3猜大小诀窍、图片扩展到音频和视频。其中以手机、平板等移动设备、智能穿戴设备及车载等

2020-06-02

1分pk10官方网址 _[热点新闻]《我是歌手4》首播惹争议 两歌手并列第七成槽点

来源: 中新1分pk10官方网址 网 2016-01-1709:05:41   来源:中新网本文责任编辑/Linda原

2020-06-02

3分pk10开户 _黄山景区再现“第三绝” 云海波澜壮阔尽收眼底

 中3分pk10开户 国网5月16日讯3分pk10开户 连日来,我国南方多地迎来了新一轮的强降雨过程。5月16日上午,安徽3分pk10开户 黄山风景区春雨初霁,出現了壮美的云海

2020-06-02