ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何通过多线程保证服务的可用性

2022-01-24 17:31:32  阅读:187  来源: 互联网

标签:服务 可用性 final 限流 保证 new dto 多线程 id


作为一名程序员,并发数已经服务器宕机这种,大家肯定都不陌生。

传统的服务提供,已经陆续的被目前的微服务所取代,但是微服务本身也是容易存在某些问题的,例如服务雪崩。

不管是zookeeper或者是Eureka,他们自身都是包含服务注册,也包含心跳机制,来确保服务提供方正确运行。

我在思考,是不是可以进一步在微服务的基础下,对服务进行主题分类。

一、服务限流

针对每个服务提供应用,进行限流。在服务代码前置下增加流量监控,要小于服务器的最大线程数。

例如:每个进入A服务器提供的服务的请求,都会先进入日志监听,然后增加切面进行流量监控。

限流可以分级限流:服务器限流、主题限流、服务限流

二、服务分类

从soap理念开始,大家就已经习惯了服务总线的存在,一方面方便大家统计现存的有哪些服务,一方面可以通过总线进行合理调度。

我们可以在微服务的基础下,每一个微服务再详细的对服务进行分类。按照主题进行拆分。

主题的区分可以按照表之间的相互影响来区分,例如更新和插入类某表,然后增加标志,判断是否有必要进行监控。

三、服务降级

针对已经分好的服务,我们可以根据服务的响应效率,对服务进行降级处理,减少他的并发数,例如服务响应时间超过3min,那么就可以把他标记为降级服务

此类服务会减少并发数,最大并发数设置为5-10。等其平均速度恢复后,在恢复并发数限制。

四、服务熔断

如果服务连续多次没有响应,那么可以考虑,将此服务注销,前提是非应用问题,是代码本身存在的问题。

针对这种统一友好提示为失败,然后通过补偿措施,在服务修复后,重新唤醒服务。

 

五、代码实现

    private static Map<String, FwddFwxxDTO> fwContainer = new ConcurrentHashMap<>();
    
    private static Map<Integer,Integer> lazyContainer = new ConcurrentHashMap<>();
    
    private static Map<String,Map<String,Integer>> breakContainer = new ConcurrentHashMap<>();

    public void loadStart(String fwbm, Object ...objects) {
        final FwddFwxxDTO dto = new FwddFwxxDTO();
        final String id = SwordSessionUtils.getSessionID();
        dto.setId(id);
        dto.setStart(new Date());
        if(!fwContainer.containsKey(id)) {
            fwContainer.put(id, dto);
        }
    }
    
    public void loadEnd(String fwbm, Object ...objects) {
        final String id = session.getId();
        if(fwContainer.containsKey(id)) {
            final FwddFwxxDTO dto = fwContainer.get(id);
            final int value = dto.hashCode();
            final Date start = dto.getStart();
            int time = start.compareTo(new Date());
            if(time > 5000) {
                //先记录懒的
                int num = lazyContainer.getOrDefault(value, 0);
                num++;
                lazyContainer.put(value, num);
                //再记录坏的
                Map<String,Integer> map_break = breakContainer.getOrDefault(fwbm, null);
                if(isNull(map_break)) {
                    
                }
            }
        }
        
    }

 

标签:服务,可用性,final,限流,保证,new,dto,多线程,id
来源: https://www.cnblogs.com/sunjianan/p/15840287.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有