精华内容
下载资源
问答
  • 系统下线工作总结

    千次阅读 2013-06-23 17:33:44
    前两个月,我负责了公司老系统:ERP(第三代营运支撑系统)的下线工作,从4月份到6-1。这段时间对这项工作的有很多的感触,现在比较闲了,我就对这项工作做一些总结,也给有类似情况的各位同仁提供一些参考。  ...

           前两个月,我负责了公司老系统:ERP(第三代营运支撑系统)的下线工作,从4月份到6-1。这段时间对这项工作的有很多的感触,现在比较闲了,我就对这项工作做一些总结,也给有类似情况的各位同仁提供一些参考。

           首先,我先来讲下背景:公司为了将来的发展及上市需要,重金打造公司第四代营运支撑系统。这个系统从立项到最终上线,经历了2年时间。2013-06-01新一代的营运支撑系统即将要上线,很多其他的周边系统要配合进行改造,把原来对接到ERP的接口改为对接到新一代的系统(下面简称A),这包括ERP在内,总共周边系统加起来有16个,上线工程异常庞大,对公司影响巨大。  鉴于此背景,A与ERP的割接方案采取“一刀切”的方式进行(具体原因不讲),A对ERP提出了以下要求:1、由于A要进行数据迁移的需要,通过分析梳理,需要ERP进行相应的功能改造,来满足A系统数据模型的需要;2、6-1 10:00 ERP当中除了指定的一些功能之外,全部切换为只读状态,不允许对其进行增、删、改。

           接下来,针对这样的需求及背景,IT专门成立了“周边系统配合A割接上线项目组”,ERP包括其中。而由于我一直以来就是做ERP维护的,所以有幸被领导指定为“ERP配合A割接上线负责人”,而ERP这条产品线(需求、开发、测试、应用、DBA)的资源我都可以随意调动。

               再接下来,我针对A对ERP的要求,及现阶段的工作情况,做了以下分析:其实在成立项目组之前我不是作为ERP配合A的负责人,是另外一个人(接下来简称B)。等到项目组成立时,我伸手去接这个事情,B也没有做一些具体的工作,只会崔A那边的人员,而且不是B本人去崔,是通过另外一个人(简称C),而C由于本身工作也比较多,所以只是一段时间崔下,没有具体跟进。所以等我去接手时,B也没有做什么交接,也没有跟我说什么其他的,其实跟没做一样。

             针对这样的现状,我梳理了下工作的方向及思路:

    1、明确用户需求,走需求流程,后有变动,走需求变更流程;

    2、对A提出的两个需求,我和ERP另外一位开发负责人(简称D)共同简单讨论了一些方案;

    3、针对方案中的一些未使用过的技术进行技术预研;

    4、根据技术预研的结果,编写ERP下线方案PPT,并进行评审与相关问题决策;

    5、走系统变更流程,明确开发、测试时间;

    6、6-1 配合A进行部署;

    7、部署校验及相应的值班计划。

     

    “明确用户需求”这点,由于A针对ERP要放开的功能目前未确定,但是又不给出一个确定版的时间,我找A那边的负责人明确给出一个具体的时间,并把这个事情邮件发送给相关领导知晓,后来这件事情就按时给解决了。

    “需求解决方案”这点,我找了ERP这条产品线中的D讨论了初步的方案,然后再跟应用及DBA进行相应的讨论。最后得出的解决方案是:ERP只读查询,除一些例外功能,解决方案是:Oracle权限控制实现。

     

    “技术预研”这点,根据我们最终采用的解决方案,Oracle权限控制实现。有两种不同的手段,第一种是表空间权限控制(即新建一个表空间,把可以进行写操作的表移动到新建表空间中,其他表空间只读);第二种是用户权限控制,即新建一个用户,分配给这个用户可以进行写操作的表权限。这两种方案无论哪一种,都需要把有写操作权限的表找出来,而要找这些表就得从可以进行写操作的功能里面找。经过开发的力量,最终查找出来这些表的清单,及这些表所对应的功能。经过对这些表的分析,发现有几张表不仅数据量大(上亿级)而且对业务有重要影响。如果采用表空间的方式,则移动这些表会造成索引失效,影响业务,而且这个移动不是说几分钟能够移动完毕的,而需要几个小时。所以最后没有采用这种方案。

     

    “编写方案PPT”这点,采用的方案,各参会领导及架构师都是认同的,但大家争论的焦点是,方案实施后的测试范围。通过从DB中查找信息发现,现在的ERP系统中有1700多个菜单,可想而知,对1700多个菜单进行测试的工作量是多么的大,而且可能大部分的工作都是白费的。针对这个问题,第一次会议没有达成一致意见,我总结了第一次会议的情况,在第二次会议时给出了4种解决方案,并最终大家投票通过。结论是:例外功能都要测试+重点的查询功能。

     

    “走系统变更流程”这点,起初不是走的这个流程。总的来说,公司的流程有点复杂,质量部对一些新制定的流程没有把控好,流程发布后问题非常的多,而且存在的争议较多。这个过程经历过流程没走对的情况,与B争吵过,并最终把B说服走”系统变更流程“。之后开发开始开发脚本并在开发环境测试,确定转测试时间,测试准备测试环境并测试。在这过程中也遇到一些问题,我负责跟踪解决,比如开发测试沟通机制,这确定了之后提高了问题解决时效。

     

    “周边系统影响分析”这点,这点做了很长时间,跨越了几个阶段。这点我主要是从DB当中的用户所对应的应用,及这些应用中所提供服务的调用系统。召开会议一一确认影响及ERP这边的解决方案,最终成功消除了影响分析不到位的问题。这项目工作分析的最深层次出发点是,哪些操作会修改ERP的数据,所以除了上面说的周边系统影响,还有一个工作流的影响:我们公司有一种“数据变更工作流”,用来处理因系统问题或其他业务考虑不全情况下的数据更新措施,既然ERP只读,那么针对“ERP”的数据变更工作流,就在提前结束,为此我联合服务部向一线发布公告,在5-31  20:00之前起草完要处理的ERP数据变更工作流,开发员加班审批。

     

    “6-1 部署上线”这点,这点前面的工作做得很好,包括配合A的模拟割接,但是在这点有一点没有考虑到问题在当时发生了。我们采用的解决方案是:新建一个用户,使其对所有表都有查询权限,但是只对某些表有写操作权限。这种方案的话,就涉及到对应用修改数据库配置文件。而ERP应用采用集群,有20个节点,其中4个节点是在一台刚换两个月的服务器上。而负责替换工作的应用组负责人,之前对ERP应用并不熟练,只部署过两次。我也考虑到如果所有节点没有覆盖全的情况,但是没有考虑到另一个问题:LINUX系统不同,相应的shell脚本会有所不同,这点没考虑到,而生产上确实就是这样的情况。由于这个问题,操作人员之前提前写好的shell脚本对两台机器不适用,就包括新换不久的机器。在正式操作的时候,只能临时想命令了。而操作人员把新换的一台服务器给遗忘了。这种情况在部署后的校验方面非常难校验出来。这个情况最终导致有一些数据进入到ERP系统,后面通过ERP与A的相关人员协商,把这些数据手工给处理掉了。

     

    “部署后校验及值班计划”这点,主要是测试人员验证,提前准备好验证用例,对功能进行校验,最终由于F5随机分配,刚好测试人员都没有分配到有问题的机子上,导致从部署操作完成之后,到一线反馈问题已经过去40分钟,所以说这种很不容易测试。如果没有这个问题,ERP下线计划及最终取得的结果应该来说是完美的,但是即使出现了这个问题,最终的结果应该来说还是很成功的。ERP下线后没有接到除此问题之外的问题。

     

           最后,我总结了下,我对shell还不熟悉,一个是由于公司原因,分工很细,另外一个是自己还学得不够深入。我想,这总的ERP下线的工作思路及当中相关技术问题的解决与处理方案是适用于一些公司的实际情况的。从这个工作,也加强了我对整体把控能力的锻炼, 我在这项工作中收获很多,希望与各位一起学习。

     

    展开全文
  • 控制上下限与规格上下限This is originally posted at https://shawnlyu.com/algorithms/binary-search-find-upper-and-lower-bound/这最初发布在...This po...

    控制上下限与规格上下限

    This is originally posted at https://shawnlyu.com/algorithms/binary-search-find-upper-and-lower-bound/

    这最初发布在https://shawnlyu.com/algorithms/binary-search-find-upper-and-lower-bound/

    This post will introduce one specific application of Binary Search, i.e., when you are asked to find the upper or lower bound, or more precisely, when you need to find the maximum of the smallest value or the minimum of the largest value.

    这篇文章将介绍Binary Search的一种特定应用,即,当您被要求查找上限或下限时,或更确切地说,当您需要查找最小值的最大值或最大值的最小值时

    Binary Search is an algorithm to search for a target from a sorted array. It selects the middle element in the array and compares it against the target; if they are not equal, it eliminates one half of the array and keeps searching the other half in the same manner(Wikipedia).

    二进制搜索是一种从排序数组中搜索目标的算法。 它选择数组中的中间元素,并将其与目标进行比较; 如果它们不相等,则消除数组的一半,并以相同的方式继续搜索另一半(维基百科)。

    The most basic application of it is to find a number or a position from an array. Some practices could be found on Leetcode:

    它的最基本应用是从数组中查找数字或位置。 在Leetcode上可以找到一些做法:

    Another popular case to apply is when you are asked to find the maximum of the smallest value or the minimum of the largest value. Let’ take 410. Split Array Largest Sum from Leetcode as an example to illustrate how to deal with this kind of problem.

    另一种流行的情况是,当要求您找到最小值的最大值或最大值的最小值时。 让我们以410. Leetcode中的最大拆分​​数组为例来说明如何处理此类问题。

    如何搜寻 (How to search)

    Search space

    搜索空间

    The search space would be from the maximum of the input nums, when m=len(nums), to the sum of nums, when m=1.

    搜索空间将从输入nums的最大值(当m=len(nums)nums之和(当m=1

    Search strategy

    搜索策略

    Each time we would pick the middle element mid of the search space as our threshold, and calculate the number of subarrays count while making sure that the sum of each subarray does not exceed mid. If count>m, it means we should increase mid to reduce the number of subarrays; else if count<=m, it means we can decrease mid to increase the number of subarrays, but mid is still qualified.

    每一次我们会选择中间元素mid为我们的门槛搜索空间,并计算子阵列的数量count ,同时确保每个子阵列的总和不超过mid 。 如果count>m ,则意味着我们应该增加mid以减少子数组的数量; 否则,如果count<=m ,则意味着我们可以减少mid来增加子数组的数量,但是mid仍然是合格的。

    So the pseudocode is:

    因此,伪代码为:

    while l < r:
    mid = l + (r-l)//2
    if count(mid) > m:
    l = mid + 1
    else:
    r = mid
    return l

    如何选择中间,左和右 (How to pick the mid, l, and r)

    选择中间(Pick the mid)

    When picking the mid out of odd number of items, we can find the middle one; when the number of items is even, there are two ways to pick: the former one or the latter one.

    当从奇数个项目中选择中间项目时,我们可以找到中间项目; 当项目数为偶数时,有两种选择方式:前一种或后一种。

    Image for post
    Pick the former one or the latter one out of an even number of items.从偶数个项目中选择前一个或后一个。

    Both of them works, but it should align with how we deal with l and r. When we select the former one using l+(r-l)//2, we want to make sure to avoid l = mid because that might lead to infinite loop. For example when there are two elements [0,1] and mid=0, then lbecomes mid and the iteration goes again and again.

    它们都可以工作,但是应该与我们处理lr保持一致。 当我们使用l+(rl)//2选择前一个时,我们要确保避免l = mid因为这可能会导致无限循环。 例如,当有两个元素[0,1]mid=0l变为mid ,迭代一次又一次。

    Similarly, when we select the latter one using r-(r-l)//2, we want to avoid r=mid.

    同样,当我们使用r-(rl)//2选择后者时,我们要避免r=mid

    给l和f赋值 (Assigning values to l and f)

    So shall we assign values to l and r?

    那么我们应该给lr赋值吗?

    Image for post
    How to assign values to l and r.如何为l和r分配值。

    It depends on the context!

    这取决于上下文!

    下界 (Lower bound)

    For example, when the question asks for the lower bound, if mid works, then r should be mid not mid-1 because mid might be the answer! And when mid does not work, l should be mid+1 because we are sure the mid is not the answer and everything falls one mid‘s left won’t work either.

    例如,当问题要求下限时,如果mid有效,则r应该是mid而不是mid-1因为mid可能是答案! 并且当mid不起作用时, l应该是mid+1因为我们确定mid不是答案,并且一切都落在mid的左边也不起作用。

    Image for post
    Assign l and r when asked for the lower bound.当要求输入下限时分配l和r。

    上限 (Upper bound)

    Similarly, we can assign values to l and r as below.

    类似地,我们可以如下为lr赋值。

    Image for post
    Assign l and r when asked for the upper bound.当要求输入上限时,分配l和r。

    In a word, the way we select mid and assign values to l and r is determined by which we are looking for: lower bound vs. upper bound.

    简而言之,我们选择mid值并将值分配给lr方式取决于我们要寻找的内容:下限与上限。

    Image for post
    How to choose mid, l and r.如何选择中,左和右。

    Finally, we need to implement the count function and here’s the AC code.

    最后,我们需要实现count功能,这是AC代码。

    class Solution:
    def splitArray(self, nums: List[int], m: int) -> int:
    l,r,n = max(nums),sum(nums),len(nums)
    def count(target):
    ret = cur = 0
    for num in nums:
    if cur+num > target:
    ret += 1
    cur = num
    else:
    cur += num
    return ret + 1

    while l < r:
    mid = l + (r-l)//2
    if count(mid) > m:
    l = mid + 1
    else:
    r = mid
    return l

    实践 (Practices)

    You may find the following practices in the Leetcode:

    您可能会在Leetcode中找到以下做法:

    翻译自: https://medium.com/swlh/binary-search-find-upper-and-lower-bound-3f07867d81fb

    控制上下限与规格上下限

    展开全文
  • Eureka下线服务

    千次阅读 2017-12-07 16:09:15
    1、首先进入Eureka工作台查看需要下线的主机 2、使用postman等工具发送:http://192.168.10.111:8761/eureka/apps/Application(应用名称)/USER-20140901AD:192.168.10.99:8080/

    1、首先进入Eureka工作台查看需要下线的主机



    2、使用postman等工具发送:http://192.168.10.111:8761/eureka/apps/Application(应用名称)/USER-20140901AD:192.168.10.99:8080/





    展开全文
  • Eureka工作原理

    万次阅读 多人点赞 2019-07-03 10:46:48
    Eureka 工作原理 上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。 Eureka 作为 Spring Cloud...

    Eureka 工作原理

    上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。

    Eureka 作为 Spring Cloud 体系中最核心、默认的注册中心组件,研究它的运行机制,有助于我们在工作中更好地使用它。

    Eureka 核心概念

    回到上节的服务注册调用示意图,服务提供者和服务的消费者,本质上也是 Eureka Client 角色。整体上可以分为两个主体:Eureka Server 和 Eureka Client。
    在这里插入图片描述

    Eureka Server:注册中心服务端

    注册中心服务端主要对外提供了三个功能:

    服务注册
    服务提供者启动时,会通过 Eureka Client 向 Eureka Server 注册信息,Eureka Server 会存储该服务的信息,Eureka Server 内部有二层缓存机制来维护整个注册表

    提供注册表
    服务消费者在调用服务时,如果 Eureka Client 没有缓存注册表的话,会从 Eureka Server 获取最新的注册表

    同步状态
    Eureka Client 通过注册、心跳机制和 Eureka Server 同步当前客户端的状态。

    Eureka Client:注册中心客户端
    Eureka Client 是一个 Java 客户端,用于简化与 Eureka Server 的交互。Eureka Client 会拉取、更新和缓存 Eureka Server 中的信息。因此当所有的 Eureka Server 节点都宕掉,服务消费者依然可以使用缓存中的信息找到服务提供者,但是当服务有更改的时候会出现信息不一致。

    Register: 服务注册
    服务的提供者,将自身注册到注册中心,服务提供者也是一个 Eureka Client。当 Eureka Client 向 Eureka Server 注册时,它提供自身的元数据,比如 IP 地址、端口,运行状况指示符 URL,主页等。

    Renew: 服务续约
    Eureka Client 会每隔 30 秒发送一次心跳来续约。 通过续约来告知 Eureka Server 该 Eureka Client 运行正常,没有出现问题。 默认情况下,如果 Eureka Server 在 90 秒内没有收到 Eureka Client 的续约,Server 端会将实例从其注册表中删除,此时间可配置,一般情况不建议更改。

    服务续约的两个重要属性

    服务续约任务的调用间隔时间,默认为30秒
    eureka.instance.lease-renewal-interval-in-seconds=30
    
    服务失效的时间,默认为90秒。
    eureka.instance.lease-expiration-duration-in-seconds=90
    

    Eviction 服务剔除
    当 Eureka Client 和 Eureka Server 不再有心跳时,Eureka Server 会将该服务实例从服务注册列表中删除,即服务剔除。

    Cancel: 服务下线
    Eureka Client 在程序关闭时向 Eureka Server 发送取消请求。 发送请求后,该客户端实例信息将从 Eureka Server 的实例注册表中删除。该下线请求不会自动完成,它需要调用以下内容:

    DiscoveryManager.getInstance().shutdownComponent()

    GetRegisty: 获取注册列表信息
    Eureka Client 从服务器获取注册表信息,并将其缓存在本地。客户端会使用该信息查找其他服务,从而进行远程调用。该注册列表信息定期(每30秒钟)更新一次。每次返回注册列表信息可能与 Eureka Client 的缓存信息不同,Eureka Client 自动处理。

    如果由于某种原因导致注册列表信息不能及时匹配,Eureka Client 则会重新获取整个注册表信息。 Eureka Server 缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同。Eureka Client 和 Eureka Server 可以使用 JSON/XML 格式进行通讯。在默认情况下 Eureka Client 使用压缩 JSON 格式来获取注册列表的信息。

    获取服务是服务消费者的基础,所以必有两个重要参数需要注意:

    # 启用服务消费者从注册中心拉取服务列表的功能
    eureka.client.fetch-registry=true
    
    # 设置服务消费者从注册中心拉取服务列表的间隔
    eureka.client.registry-fetch-interval-seconds=30
    

    Remote Call: 远程调用
    当 Eureka Client 从注册中心获取到服务提供者信息后,就可以通过 Http 请求调用对应的服务;服务提供者有多个时,Eureka Client 客户端会通过 Ribbon 自动进行负载均衡。

    自我保护机制

    默认情况下,如果 Eureka Server 在一定的 90s 内没有接收到某个微服务实例的心跳,会注销该实例。但是在微服务架构下服务之间通常都是跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,网络分区故障,导致此实例被注销。

    固定时间内大量实例被注销,可能会严重威胁整个微服务架构的可用性。为了解决这个问题,Eureka 开发了自我保护机制,那么什么是自我保护机制呢?

    Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。

    Eureka Server 触发自我保护机制后,页面会出现提示:

    在这里插入图片描述

    Eureka Server 进入自我保护机制,会出现以下几种情况:
    (1 Eureka 不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
    (2 Eureka 仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上(即保证当前节点依然可用)
    (3 当网络稳定时,当前实例新的注册信息会被同步到其它节点中

    Eureka 自我保护机制是为了防止误杀服务而提供的一个机制。当个别客户端出现心跳失联时,则认为是客户端的问题,剔除掉客户端;当 Eureka 捕获到大量的心跳失败时,则认为可能是网络问题,进入自我保护机制;当客户端心跳恢复时,Eureka 会自动退出自我保护机制。

    如果在保护期内刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,即会调用失败。对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。

    通过在 Eureka Server 配置如下参数,开启或者关闭保护机制,生产环境建议打开:

    eureka.server.enable-self-preservation=true
    

    Eureka 集群原理

    再来看看 Eureka 集群的工作原理。我们假设有三台 Eureka Server 组成的集群,第一台 Eureka Server 在北京机房,另外两台 Eureka Server 在深圳和西安机房。这样三台 Eureka Server 就组建成了一个跨区域的高可用集群,只要三个地方的任意一个机房不出现问题,都不会影响整个架构的稳定性。

    在这里插入图片描述

    从图中可以看出 Eureka Server 集群相互之间通过 Replicate 来同步数据,相互之间不区分主节点和从节点,所有的节点都是平等的。在这种架构中,节点通过彼此互相注册来提高可用性,每个节点需要添加一个或多个有效的 serviceUrl 指向其他节点。

    如果某台 Eureka Server 宕机,Eureka Client 的请求会自动切换到新的 Eureka Server 节点。当宕机的服务器重新恢复后,Eureka 会再次将其纳入到服务器集群管理之中。当节点开始接受客户端请求时,所有的操作都会进行节点间复制,将请求复制到其它 Eureka Server 当前所知的所有节点中。

    另外 Eureka Server 的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。所以,如果存在多个节点,只需要将节点之间两两连接起来形成通路,那么其它注册中心都可以共享信息。每个 Eureka Server 同时也是 Eureka Client,多个 Eureka Server 之间通过 P2P 的方式完成服务注册表的同步。

    Eureka Server 集群之间的状态是采用异步方式同步的,所以不保证节点间的状态一定是一致的,不过基本能保证最终状态是一致的。

    Eureka 分区
    Eureka 提供了 Region 和 Zone 两个概念来进行分区,这两个概念均来自于亚马逊的 AWS:
    region:可以理解为地理上的不同区域,比如亚洲地区,中国区或者深圳等等。没有具体大小的限制。根据项目具体的情况,可以自行合理划分 region。
    zone:可以简单理解为 region 内的具体机房,比如说 region 划分为深圳,然后深圳有两个机房,就可以在此 region 之下划分出 zone1、zone2 两个 zone。

    上图中的 us-east-1c、us-east-1d、us-east-1e 就代表了不同的 Zone。Zone 内的 Eureka Client 优先和 Zone 内的 Eureka Server 进行心跳同步,同样调用端优先在 Zone 内的 Eureka Server 获取服务列表,当 Zone 内的 Eureka Server 挂掉之后,才会从别的 Zone 中获取信息。

    Eurka 保证 AP

    Eureka Server 各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。而 Eureka Client 在向某个 Eureka 注册时,如果发现连接失败,则会自动切换至其它节点。只要有一台 Eureka Server 还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不保证强一致性)。

    Eurka 工作流程

    了解完 Eureka 核心概念,自我保护机制,以及集群内的工作原理后,我们来整体梳理一下 Eureka 的工作流程:

    1、Eureka Server 启动成功,等待服务端注册。在启动过程中如果配置了集群,集群之间定时通过 Replicate 同步注册表,每个 Eureka Server 都存在独立完整的服务注册表信息

    2、Eureka Client 启动时根据配置的 Eureka Server 地址去注册中心注册服务

    3、Eureka Client 会每 30s 向 Eureka Server 发送一次心跳请求,证明客户端服务正常

    4、当 Eureka Server 90s 内没有收到 Eureka Client 的心跳,注册中心则认为该节点失效,会注销该实例

    5、单位时间内 Eureka Server 统计到有大量的 Eureka Client 没有上送心跳,则认为可能为网络异常,进入自我保护机制,不再剔除没有上送心跳的客户端

    6、当 Eureka Client 心跳请求恢复正常之后,Eureka Server 自动退出自我保护模式

    7、Eureka Client 定时全量或者增量从注册中心获取服务注册表,并且将获取到的信息缓存到本地

    8、服务调用时,Eureka Client 会先从本地缓存找寻调取的服务。如果获取不到,先从注册中心刷新注册表,再同步到本地缓存

    9、Eureka Client 获取到目标服务器信息,发起服务调用

    10、Eureka Client 程序关闭时向 Eureka Server 发送取消请求,Eureka Server 将实例从注册表中删除

    这就是Eurka基本工作流程

    总结

    讲了 Eureka 核心概念、Eureka 自我保护机制和 Eureka 集群原理。通过分析 Eureka 工作原理,我可以明显地感觉到 Eureka 的设计之巧妙,通过一些列的机制,完美地解决了注册中心的稳定性和高可用性。

    Eureka 为了保障注册中心的高可用性,容忍了数据的非强一致性,服务节点间的数据可能不一致, Client-Server 间的数据可能不一致。比较适合跨越多机房、对注册中心服务可用性要求较高的使用场景。

    展开全文
  • 什么是数据仓库?

    万次阅读 多人点赞 2019-04-24 19:44:14
    什么需要数据仓库?... 但这种表现关系的上限和下限就定死了,比如QQ的用户信息,直接通过查询info表,对应的username、introduce等信息即可,而此时我想知道这个用户在哪个时间段购买了什么?修改...
  • 生产系统下线有感

    2019-10-28 14:25:26
    生产系统中介管理运行了8年,在我手中也运行了4年多的时间,今朝下线,只保留查询功能,心中不舍,亲手操刀运停。 1.梳理下线的功能流程。 2.删除下线功能的业务人员操作权限,各领导审核权限。 3.备份历史数据,...
  • 产品下线也不容易

    千次阅读 2015-05-15 13:25:32
    产品下线表明的也是一种态度,忍着痛也要做好,为用户,也为自己。
  • linux下线程同步

    千次阅读 2012-09-19 20:59:44
    同互斥量以上, 在释放读写锁占用的内存之前, 需要先通过pthread_rwlock_destroy对读写锁进行清理工作, 释放由init分配的资源.   4. 读和写:   #include  < pthread.h > int  pthread_...
  • java泛型上限和下限的简单示例
  • Eureka服务实例的摘除包含两种情况,第一种就是正常的服务实例下线,第二种是服务实例故障,然后自动摘除故障的服务实例 先来说说第一种情况,
  • 精煤小筛分估计法工作量小,测定分选下限较快,但客观性较差;精煤小筛分累计灰分估计法受精煤泥粒度组成影响较大;分配曲线精确测定法能客观测定分选下限,受各方面影响较小,但试验量大。因此,精煤小筛分估计法和精煤小...
  • SDN介绍(什么是SDN)

    万次阅读 多人点赞 2019-07-12 14:11:48
    SDN介绍一. 什么是SDN?二.SDN解决什么问题?三.传统网络概念和结构体系传统网络数据控制与转发:传统网络架构:四.SDN概述SDN(Software Defined Netrork)软件定义网络。SDN的分类五.SDN网络架构SDN网络体系...
  • 跟着运维工程师的工作越来越香,不断增加的人选择它来开端自个的工作生涯。那么你想不想深化了解运维工程师的日子?他们的一天是怎样度过的?小编我就从baidu贴吧、知乎上整理了些运维大小牛们的自述,看看是不是有...
  • Hadoop上线下线节点

    千次阅读 2013-10-21 11:08:34
    1)如果不balance,那么cluster会把新的数据都存放在新的node上,这样会降低mapred的工作效率  2)设置平衡阈值,默认是10%,值越低各节点越平衡,但消耗时间也更长  [root@slave-004 hadoop] # ./bin/...
  • 1.服务离线 服务离线,即某服务不能对外提供服务了。服务离线的原因有两种:服务下架与服务下线。这两种方案都是基于Actuator监控器实现的。 ● 服务下架:将注册到Eureka Server中的Eureka ...1.1 准备工作 为Eureka
  • 跟着运维工程师的工作越来越香,不断增加的人选择它来开端自个的工作生涯。那么你想不想深化了解运维工程师的日子?他们的一天是怎样度过的?小编我就从baidu贴吧、知乎上整理了些运维大小牛们的自述,看看是不是有...
  • 近年以来,随着整车功能复杂程度的提升,整车下线流程(EOL,End of Line) 也变得越来越复杂,除了传统的动力、车身部分的下线流程扩充外,更有智能驾驶,网络安全相关的新流程加入。而下线流程作为整车生产环节末端...
  • 个人六年的成长与工作经验分享

    千次阅读 2019-04-03 18:44:18
    我把过去六年的成长历程和工作经验进行了汇总,很多都是血泪史,分享给各位。 主要分为三部分: 一、问题导入; 1、工作; 现象:很多同学都有类似的感觉,比如角色认知不对,眼高手低,每次都感觉差一点等; ...
  • 驻极体话筒的正常工作电压是多少? (1)工作电压(UDS)。这是指驻极体话筒正常工作时,所必须施加在话筒两端的最小直流工作电压。该参数视型号不同而有所不同,即使是同一种型号也有较大的离散性,通常厂家给出...
  • 泛型上下限理解,这下忘不了
  • 一致性算法中的节点下限

    千次阅读 2012-02-26 23:53:31
    在众多的分布式一致性算法中,经常需要通过节点的数量满足某种规则来保证算法的正确性,比如Paxos算法,依赖一个”多数派“ 节点的工作的正确性。这类算法的共同目标是容许尽量多的节点失败但又不影响算法的正确性”...
  • 2.3 分割月薪字段,分别获取月薪的下限值和上限值 将数据信息按职位月薪进行排序 判断爬取的数据是否有重复值 从上述结果可看出,数据是没有重复的。 3 对全国范围内的...
  • 另外,之前两千多篇博客下线了,正在整改中,所以主页看到的文章较少,详情请参阅==>关于专栏与文章近期下线说明 二、我是谁?我在哪?我是在干肾么? 2021届应届生,软件工程,不要问我学历。去年9月多参加校招,11...
  • 什么是前端?什么又是后端呢? 1,在你机子上(PC端/手机端)看到的界面,安装的程序。给用户看的、操作的就是前端。你看不到的,帮你保存网络游戏数据,保存应用数据,处理数据的就是后端(服务端)。 2, 目前...
  • 基于比较排序的时间复杂度下限

    千次阅读 2014-06-07 17:04:06
    基于比较的排序算法的时间复杂度下限[转] 昨天下午吃完饭,正好碰到一同学,就随便聊了聊。他说刚参加完一个面试。我很感兴趣,因为下半年就该我找工作了,这方面的信息对我来说比较重要。看得出来,他有点小...
  • MTBF指标是什么

    千次阅读 2007-08-20 20:20:00
    MTBF的全称是Mean Time Before Failure, MTBF是平均无故障时间的简称。...比如硬盘通常说MTBF是3万小时,实际上测试的时候用高温高湿反复变化来加快出现故障的时间,这样推测得出(否则硬盘下线要好几年后才能
  • Zookeeper 工作原理(待查) Zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。 zoo与eur区别 zookeeper...
  • SpringCloud服务如何在Eureka实现优雅的上、下线 在SpingCloud实际应用中,有时需要根据需要将服务下线,过一段时间后又需要将下架的服务进行上线,在此,根据本人亲身试验,...1、准备工作:引入依赖 <dependen...
  • ping工作原理

    万次阅读 多人点赞 2011-09-13 11:37:41
     一、什么是 PING 是 DOS 命令,一般用于检测网络通与不通 ,也叫时延,其值越大,速度越慢 PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping 发 送一个 ICMP 回声请求消息给...
  • 最近两三年,我们部门都会在年初设定部门目标和个人目标,实施以来效果很明显,大家都知道部门要做什么,个人应该做什么,我们会在月末进行复盘和总结,这就是团队的进步,也是个人的进步。 我们是比较传统的IT公司...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,030
精华内容 26,412
关键字:

下线是什么工作