精华内容
下载资源
问答
  • 微服务接口限流的设计、思考

    千次阅读 2018-11-29 10:13:59
    微服务拆分之后,系统之间的调用关系错综复杂,平台的整体复杂熵升高,出错的概率、debug 问题的难度都高了好...本文试图讲清楚以下问题,如果您对限流类似的疑问或对某一话题感兴趣,欢迎阅读本文。 微服务...

    微服务拆分之后,系统之间的调用关系错综复杂,平台的整体复杂熵升高,出错的概率、debug 问题的难度都高了好几个数量级。所以,服务治理便成了微服务的一个技术重点。服务治理本身的概念比较大,包括鉴权、限流、降级、熔断、监控告警等等,本文聚焦于限流,根据笔者的实战经验,分享一些对微服务接口限流的思考。

    本文试图讲清楚以下问题,如果您对限流也有类似的疑问或对某一话题感兴趣,欢迎阅读本文。

    1. 微服务架构中没有接口限流,可能会遇到哪些问题?

    2. 针对微服务接口限流,如何选择合适的限流算法?

    3. 如何根据场景和性能要求权衡选择单机还是分布式限流?

    4. 如何根据业务需求灵活的选择不同的限流熔断机制?

    5. 如何对接口选择合适的限流时间粒度和最大限流值?

    6. 如何验证微服务接口限流功能的有效性和正确性?

    7. 如何打造高度容错、高 TPS、低延迟的限流框架?

    文章的最后,还顺带介绍了笔者开源的限流框架: ratelimiter4j,欢迎大家交流使用。

    1微服务接口限流的背景

    在应对秒杀、大促、双 11、618 等高性能压力的场景时,限流已经成为了标配技术解决方案,为保证系统的平稳运行起到了关键性的作用。不管应用场景是哪种,限流无非就是针对超过预期的流量,通过预先设定的限流规则选择性的对某些请求进行限流“熔断”。限于篇幅和作者的经验能力,本文主要讲微服务架构下,服务接口的限流。

    对于微服务来说,特别是一些中台微服务,其接口请求可能来自很多系统,例如用户服务的接口会被很多内部系统调用,比如 CRM, 促销系统等。对于服务于众多调用系统和应对海量接口请求的微服务来说,接口限流除了应对上面提到的一些大促秒杀场景之外,在下面一些场景中也发挥着很大的作用。

    作为提供接口服务的微服务系统,我们是无法限制调用方如何来使用我们的接口的,我们曾经就遇到过有一些调用方多线程并发跑 job 来请求我们的接口,也遇到到一些因为调用方的代码 bug 或者业务上面的突发流量,导致来自这个调用方的接口请求数量突增,过度争用服务线程资源,而来自其他调用方的接口请求因此来不及响应而排队等待,微服务整体的请求响应时间变长甚至超时。所以为了防止接口被过度调用,需要对每个调用方进行细粒度的访问限流。

    除了对调用者的访问频率进行限制外,我们有的时候还需要对某些接口的访问频率做限制。比如一些慢接口,可能因为逻辑复杂,处理时间会比较长,如果对慢接口的访问频率不加限制,过多的慢接口请求会一直占用服务的线程资源不释放,导致无法响应其他接口请求,影响微服务系统整体的吞吐量和接口响应时间,甚至引起大量的接口超时。除了慢接口,有些核心接口,因为一旦异常访问对业务的影响比较大,除了做调用鉴权之外,还需要做非预期异常流量的限流。

    综上所述,我们不仅仅需要针对大促秒杀场景的粗粒度的微服务接口限流功能:比如限制微服务集群单台机器每秒请求次数,我们还需要针对不同调用方甚至不同接口进行更加细粒度限流:比如限制 A 调用方对某个服务的某个的接口的每秒最大请求次数。

    2微服务接口限流的背景

    限流中的“流”字该如何解读呢?要限制的指标到底是什么?不同的场景对“流”的定义也是不同的,可以是网络流量,带宽,每秒处理的事务数 (TPS),每秒请求数 (hits per second),并发请求数,甚至还可能是业务上的某个指标,比如用户在某段时间内允许的最多请求短信验证码次数。

    从保证系统稳定可用的角度考量,对于微服务系统来说,最好的一个限流指标是:并发请求数。通过限制并发处理的请求数目,可以限制任何时刻都不会有过多的请求在消耗资源,比如:我们通过配置 web 容器中 servlet worker 线程数目为 200,则任何时刻最多都只有 200 个请求在处理,超过的请求都会被阻塞排队。

    上一节讲到,我们为了解决调用方对服务资源的过度争用问题,还需要针对不同调用方甚至不同接口做细粒度限流,所以,我们除了需要对系统整体的并发请求数做限制之外,还需要对每个调用方甚至不同接口的并发请求数做限制。但是,要想合理的设置某个调用方的最大允许并发数是比较困难的,这个值很难通过监控统计来获取,太小容易误杀,太大又起不了作用。所以我们还需要其他限流指标。

    对比 TPS 和 hits per second 的两个指标,我们选择使用 hits per second 作为限流指标。因为,对 TPS 的限流实际上是无法做的,TPS 表示每秒处理事务数,事务的开始是接收到接口请求,事务的结束是处理完成返回,所以有一定的时间跨度,如果事务开始限流计数器加一,事务结束限流计数器减一,则就等同于并发限流。而如果把事务请求接收作为计数时间点,则就退化为按照 hits per second 来做限流,而如果把事务结束作为计数时间点,则计数器的数值并不能代表系统当下以及接下来的系统访问压力。

    对 hits per second 的限流是否是一个有效的限流指标呢?答案是肯定的,这个值是可观察可统计的,所以方便配置限流规则,而且这个值在一定程度上反应系统当前和接下来的性能压力,对于这一指标的限流确实也可以达到限制对系统资源的使用。

    有了流的定义之后,我们接下来看几种常用的限流算法:固定时间窗口,滑动时间窗口,令牌桶算法,漏桶算法以及他们的改进版本。

    3固定、滑动时间窗口限流算法

    基于固定时间窗口的限流算法是非常简单的。首先需要选定一个时间起点,之后每次接口请求到来都累加计数器,如果在当前时间窗口内,根据限流规则(比如每秒钟最大允许 100 次接口请求),累加访问次数超过限流值,则限流熔断拒绝接口请求。当进入下一个时间窗口之后,计数器清零重新计数。

    这种基于固定时间窗口的限流算法的缺点在于:限流策略过于粗略,无法应对两个时间窗口临界时间内的突发流量。我们举一个例子:假设我们限流规则为每秒钟不超过 100 次接口请求,第一个 1s 时间窗口内,100 次接口请求都集中在最后的 10ms 内,在第二个 1s 的时间窗口内,100 次接口请求都集中在最开始的 10ms 内,虽然两个时间窗口内流量都符合限流要求 (<=100 个请求),但在两个时间窗口临界的 20ms 内会集中有 200 次接口请求,如果不做限流,集中在这 20ms 内的 200 次请求就有可能压垮系统,如图 -1:

    滑动时间窗口算法是对固定时间窗口算法的一种改进,流量经过滑动时间窗口算法整形之后,可以保证任意时间窗口内,都不会超过最大允许的限流值,从流量曲线上来看会更加平滑,可以部分解决上面提到的临界突发流量问题。对比固定时间窗口限流算法,滑动时间窗口限流算法的时间窗口是持续滑动的,并且除了需要一个计数器来记录时间窗口内接口请求次数之外,还需要记录在时间窗口内每个接口请求到达的时间点,对内存的占用会比较多。滑动时间窗口的算法模型如下:

    滑动窗口记录的时间点 list = (t_1, t_2, …t_k),时间窗口大小为 1 秒,起点是 list 中最小的时间点。当 t_m 时刻新的请求到来时,我们通过以下步骤来更新滑动时间窗口并判断是否限流熔断:

    STEP 1: 检查接口请求的时间 t_m 是否在当前的时间窗口 [t_start, t_start+1 秒) 内。如果是,则跳转到 STEP 3,否则跳转到 STEP 2.

    STEP 2: 向后滑动时间窗口,将时间窗口的起点 t_start 更新为 list 中的第二小时间点,并将最小的时间点从 list 中删除。然后,跳转到 STEP 1。

    STEP 3: 判断当前时间窗口内的接口请求数是否小于最大允许的接口请求限流值,即判断: list.size < max_hits_limit,如果小于,则说明没有超过限流值,允许接口请求,并将此接口请求的访问时间放入到时间窗口内,否则直接执行限流熔断。

    滑动时间窗口限流算法可以部分解决固定时间窗口的临界问题,上面的例子通过滑动时间窗口算法整形之后,第一个 1 秒的时间窗口的 100 次请求都会通过,第二个时间窗口最开始 10ms 内的 100 个请求会被限流熔断。

    即便滑动时间窗口限流算法可以保证任意时间窗口内接口请求次数都不会超过最大限流值,但是仍然不能防止在细时间粒度上面访问过于集中的问题,比如上面举的例子,第一个 1s 的时间窗口内 100 次请求都集中在最后 10ms 中。也就是说,基于时间窗口的限流算法,不管是固定时间窗口还是滑动时间窗口,只能在选定的时间粒度上限流,对选定时间粒度内的更加细粒度的访问频率不做限制。

    为了应对上面的问题,对于时间窗口限流算法,还有很多改进版本,比如:

    多层次限流,我们可以对同一个接口设置多条限流规则,除了 1 秒不超过 100 次之外,我们还可以设置 100ms 不超过 20 次 (这里需要设置的比 10 次大一些),两条规则同时限制,流量会更加平滑。除此之外,还有针对滑动时间窗口限流算法空间复杂度大的改进算法,限于篇幅,这里就不展开详说了。

    4令牌桶、漏桶限流算法

    上面我们讲了两种基于时间窗口的限流算法:固定时间窗口和滑动时间窗口算法,两种限流算法都无法应对细时间粒度的突发流量,对流量的整形效果在细时间粒度上不够平滑。本节介绍两种更加平滑的限流算法:令牌桶算法和漏桶算法,在某些场景下,这两种算法会优于时间窗口算法成为首选。实际上令牌桶和漏桶算法的算法思想大体类似,可以把漏桶算法作为令牌桶限流算法的改进版本,所以我们以介绍令牌桶算法为主。

    我们先来看下最基础未经过改进的令牌桶算法:

    1. 接口限制 t 秒内最大访问次数为 n,则每隔 t/n 秒会放一个 token 到桶中;

    2. 桶中最多可以存放 b 个 token,如果 token 到达时令牌桶已经满了,那么这个 token 会被丢弃;

    3. 接口请求会先从令牌桶中取 token,拿到 token 则处理接口请求,拿不到 token 则执行限流。

    令牌桶算法看似比较复杂,每间隔固定时间都要放 token 到桶中,但并不需要专门起一个线程来做这件事情。每次在取 token 之前,根据上次放入 token 的时间戳和现在的时间戳,计算出这段时间需要放多少 token 进去,一次性放进去,所以在实现上面也并没有太大难度。

    漏桶算法稍微不同与令牌桶算法的一点是:对于取令牌的频率也有限制,要按照 t/n 固定的速度来取令牌,所以可以看出漏桶算法对流量的整形效果更加好,流量更加平滑,任何突发流量都会被限流。因为令牌桶大小为 b,所以是可以应对突发流量的。当然,对于令牌桶算法,还有很多其他改进算法,比如:

    1. 预热桶

    2. 一次性放入多个令牌

    3. 支持一次性取多个令牌

    对比基于时间窗口的限流算法,令牌桶和漏桶算法对流量整形效果比时间窗口算法要好很多,但是并不是整形效果越好就越合适,对于没有提前预热的令牌桶,如果做否决式限流,会导致误杀很多请求。上述算法中当 n 比较小时,比如 50,间隔 20ms 才会向桶中放入一个令牌,而接口的访问在 1s 内可能随机性很强,这就会出现:尽管从曲线上看对最大访问频率的限制很有效,流量在细时间粒度上面都很平滑,但是误杀了很多本不应该拒绝的接口请求。

    所以令牌桶和漏桶算法比较适合阻塞式限流,比如一些后台 job 类的限流,超过了最大访问频率之后,请求并不会被拒绝,而是会被阻塞到有令牌后再继续执行。对于像微服务接口这种对响应时间比较敏感的限流场景,会比较适合选择基于时间窗口的否决式限流算法,其中滑动时间窗口限流算法空间复杂度较高,内存占用会比较多,所以对比来看,尽管固定时间窗口算法处理临界突发流量的能力较差,但实现简单,而简单带来了好的性能和不容易出错,所以固定时间窗口算法也不失是一个好的微服务接口限流算法。

    5限流算法分布式改造: 分布式限流算法

    相对于单机限流算法,分布式限流算法的是指: 算法可以分布式部署在多台机器上面,多台机器协同提供限流功能,可以对同一接口或者服务做限流。分布式限流算法相较于单机的限流算法,最大的区别就是接口请求计数器需要中心化存储,比如我们开源限流项目 ratelimiter4j 就是基于 Redis 中心计数器来实现分布式限流算法。

    分布式限流算法在引入 Redis 中心计数器这个独立的系统之后,系统的复杂度一下子高了很多,因为要解决一些分布式系统的共性技术问题:

    1. 数据一致性问题  

    接口限流过程包含三步操作:

    Step 1:“读”当前的接口访问计数 n;

    Step 2:”判断”是否限流;

    Step 3:“写”接口计数 n+1, if 接口限流验证通过

    在并发情况下,这 3 步 CAS 操作 (compare and swap) 存在 race condition。在多线程环境下,可以通过线程的加锁或者 concurrent 开发包中的 Atomic 原子对象来实现。在分布式情况下,思路也是类似的,可以通过分布式锁,来保证同一时间段只有一个进程在访问,但是引入分布式锁需要引入新的系统和维护锁的代码,代价较大,为了简单,我们选择另一种思路:借助 Redis 单线程工作模式 +Lua 脚本完美的支持了上述操作的原子性。限于篇幅,不展开代码讨论,详细可以参看开源项目 ratelimiter4j.

    2. 超时问题  

    对于 Redis 的各种异常情况,我们处理起来并不是很难,catch 住,封装为统一的 exception,向上抛,或者吞掉。但是如果 Redis 访问超时,会严重影响接口的响应时间甚至导致接口响应超时,这个副作用是不能接受的。所以在我们访问 Redis 时需要设置合理的超时时间,一旦超时,判定为限流失效,继续执行接口逻辑。Redis 访问超时时间的设置既不能太大也不能太小,太大可能会影响到接口的响应时间,太小可能会导致太多的限流失效。我们可以通过压测或者线上监控,获取到 Redis 访问时间分布情况,再结合服务接口可以容忍的限流延迟时间,权衡设置一个较合理的超时时间。

    3. 性能问题  

    分布式限流算法的性能瓶颈主要在中心计数器 Redis,从我们开源的 ratelimiter4j 压测数据来看,在没有做 Redis sharding 的情况下,基于单实例 Redis 的分布式限流算法的性能要远远低于基于内存的单机限流算法,基于我们的压测环境,单机限流算法可以达到 200 万 TPS,而分布式限流算法只能做到 5 万 TPS。所以,在应用分布式限流算法时,一定要考量限流算法的性能是否满足应用场景,如果微服务接口的 TPS 已经超过了限流框架本身的 TPS,则限流功能会成为性能瓶颈影响接口本身的性能。

    除了 TPS 之外,网络延迟也是一个需要特别考虑的问题,特别是如果中心计数器与限流服务跨机房跨城市部署,之间的网络延迟将会非常大,严重影响微服务接口的响应时间。

    6如何选择单机限流还是分布式限流

    首先需要说明一下:这里所说的单机限流和分布式限流与之前提到的单机限流算法和分布式限流算法并不是一个概念!为了提高服务的性能和可用性,微服务都会多实例集群部署,所谓单机限流是指:独立的对集群中的每台实例进行接口限流,比如限制每台实例接口访问的频率为最大 1000 次 / 秒,单机限流一般使用单机限流算法;所谓的分布式限流是指:提供服务级的限流,限制对微服务集群的访问频率,比如限制 A 调用方每分钟最多请求 1 万次“用户服务”,分布式限流既可以使用单机限流算法也可以使用分布式限流算法。

    单机限流的初衷是防止突发流量压垮服务器,所以比较适合针对并发做限制。分布式限流适合做细粒度限流或者访问配额,不同的调用方对不同的接口执行不同的限流规则,所以比较适合针对 hits per second 限流。从保证系统可用性的角度来说,单机限流更具优势,从防止某调用方过度竞争服务资源来说,分布式限流更加适合。

    分布式限流与微服务之间常见的部署架构有以下几种:

    1. 在接入层(api-gateway)集成限流功能  

    这种集成方式是在微服务架构下,有 api-gateway 的前提下,最合理的架构模式。如果 api-gateway 是单实例部署,使用单机限流算法即可。如果 api-gateway 是多实例部署,为了做到服务级别的限流就必须使用分布式限流算法。

    2. 限流功能封装为 RPC 服务  

    当微服务接收到接口请求之后,会先通过限流服务暴露的 RPC 接口来查询接口请求是否超过限流阈值。这种架构模式,需要部署一个限流服务,增加了运维成本。这种部署架构,性能瓶颈会出现在微服务与限流服务之间的 RPC 通信上,即便单机限流算法可以做到 200 万 TPS,但经过 RPC 框架之后,做到 10 万 TPS 的请求限流就已经不错了。

    3. 限流功能集成在微服务系统内  

    这种架构模式不需要再独立部署服务,减少了运维成本,但限流代码会跟业务代码有一些耦合,不过,可以将限流功能集成在切面层,尽量跟业务代码解耦。如果做服务级的分布式限流,必须使用分布式限流算法,如果是针对每台微服务实例进行单机限流,使用单机限流算法就可以。

    7针对不同业务使用不同限流熔断策略

    这里所讲的熔断策略,就是当接口达到限流上限之后,如何来处理接口请求的问题。前面也有提到过一些限流熔断策略了,所谓否决式限流就是超过最大允许访问频率之后就拒绝请求,比如返回 HTTP status code 429 等,所谓阻塞式限流就是超过最大允许访问频率之后就排队请求。除此之外,还有其他一些限流熔断策略,比如:记录日志,发送告警,服务降级等等。

    同一个系统对于不同的调用方也有可能有不同的限流熔断策略,比如对响应时间敏感的调用方,我们可能采用直接拒绝的熔断策略,对于像后台 job 这样对响应时间不敏感的调用方,我们可能采用阻塞排队处理的熔断策略。

    我们再来看下其他熔断策略的一些应用场景:比如限流功能刚刚上线,为了验证限流算法的有效性及其限流规则的合理性,确保不误杀请求,可以先采用日志记录 + 告警的限流熔断策略,通过分析日志判定限流功能正常工作后,再进一步升级为其他限流熔断策略。

    不同的熔断策略对于选择限流算法也是有影响的,比如令牌桶和漏桶算法就比较适合阻塞式限流熔断场景,如果是否决式的限流熔断场景就比较适合选择基于时间窗口的限流算法。

    8如何配置合理的限流规则

    限流规则包含三个部分:时间粒度,接口粒度,最大限流值。限流规则设置是否合理直接影响到限流是否合理有效。

    对于限流时间粒度的选择,我们既可以选择 1 秒钟不超过 1000 次,也可以选择 10 毫秒不超过 10 次,还可以选择 1 分钟不超过 6 万次,虽然看起这几种限流规则都是等价的,但过大的时间粒度会达不到限流的效果,比如限制 1 分钟不超过 6 万次,就有可能 6 万次请求都集中在某一秒内;相反,过小的时间粒度会削足适履导致误杀很多本不应该限流的请求,因为接口访问在细时间粒度上随机性很大。所以,尽管越细的时间粒度限流整形效果越好,流量曲线越平滑,但也并不是越细越合适。

    对于访问量巨大的接口限流,比如秒杀,双十一,这些场景下流量可能都集中在几秒内,TPS 会非常大,几万甚至几十万,需要选择相对小的限流时间粒度。相反,如果接口 TPS 很小,建议使用大一点的时间粒度,比如限制 1 分钟内接口的调用次数不超过 1000 次,如果换算成:一秒钟不超过 16 次,这样的限制就有点不合理,即便一秒内超过 16 次,也并没有理由就拒绝接口请求,因为对于我们系统的处理能力来说,16 次 / 秒的请求频率太微不足道了。即便 1000 次请求都集中在 1 分钟内的某一秒内,也并不会影响到系统的稳定性,所以 1 秒钟 16 次的限制意义不大。

    除了时间粒度之外,还需要根据不同的限流需求选择不同接口粒度,比如:

    1)限制微服务每个实例接口调用频率

    2)限制微服务集群整体的访问频率

    2)限制某个调用方对某个服务的调用频率

    3)限制某个调用方对某个服务的某个接口的访问频率

    4)限制某服务的某个接口的访问频率

    5)限制某服务的某类接口的访问频率

    对于最大允许访问频率的设置,需要结合性能压测数据、业务预期流量、线上监控数据来综合设置,最大允许访问频率不大于压测 TPS,不小于业务预期流量,并且参考线上监控数据。

    9如何配置合理的限流规则

    这里所说的有效性包含两个方面:限流算法的有效性和限流规则的有效性。在大促,秒杀,或者其他异常流量到来之前,我们需要事先通过实验来验证限流功能的有效性,用数据来证明限流功能确实能够拦截非预期的异常流量。否则,就有可能会因为限流算法的选择不够合适或者限流规则设置不合理,导致真正超预期流量到来的时候,限流不能起到保护服务的作用,超出预期的异常流量压垮系统。

    如何测试限流功能正确有效呢?尽管可以通过模拟流量或者线上流量回放等手段来测试,但是最有效的测试方法还是:通过导流的方式将流量集中到一小组机器上做真实场景的测试。对于测试结果,我们至少需要记录每个请求的如下信息:对应接口,请求时间点,限流结果 (通过还是熔断),然后根据记录的数据绘制成如下图表:

    从图表中,我们可以一目了然的了解限流前与限流后的流量情况,可以清晰的看到限流规则和算法对流量的整形是否合理有效。

    除了事先验证之外,我们还需要时刻监控限流的工作情况,实时了解限流功能是否运行正常。一旦发生限流异常,能够在不重启服务的情况下,做到热更新限流配置:包括开启关闭限流功能,调整限流规则,更换限流算法等等。

    10高容错高性能开源限流框架:ratelimiter4j

    ratelimiter4j 是一个高性能高容错易集成的限流框架, 从功能的角度来看限流功能的实现并不复杂,而非功能性的需求是系统开发的技术难点:

    1)低延迟:不能或者较小的影响接口本身的响应时间

    每个微服务接口请求都需要检查是否超过了限定的访问频率,无疑会增加接口的响应时间,而响应时间对于微服务接口来说,是一个非常关注的性能指标,所以让限流延迟尽可能小,是我们在开发 ratelimiter4j 限流框架时特别考虑的。

    2)高度容错:限流框架的异常不影响微服务的可用性

    接入限流本身是为了提供系统的可用性稳定性,不能因为限流本身的异常反过来影响到微服务的可用性,这个副作用是不能接受的。比如分布式限流算法依赖的 Redis 挂掉了,限流操作无法进行,这个时候业务接口也要能继续正常服务。

    3)高 TPS:限流框架的 TPS 至少要大于微服务本身的接口 TPS

    对于大规模服务来说,接口访问频率比较高,几万甚至几十万的 TPS,限流框架支持的 TPS 至少要高于服务本身的 TPS,否则就会因为限流本身的性能问题反过来拖垮服务。

    目前 ratelimiter4j 框架将限流规则组织成 trie  tree 数据结构,可以实现快速查询请求对应的接口限流规则,实验证明 trie tree 这种数据结构非常适合像 url 这种具有分级目录且目录重复度高的接口格式。

    针对分布式限流,目前 ratelimiter4j 压测得到的结果在响应时间可以接受的范围内最大支持 5 万 TPS,高并发对 TPS 的影响并不敏感,瓶颈主要在 Redis 中心计数器,接下来会通过改进算法及其中心计数器支持 sharding 的方式来优化性能。

    ratelimiter4j GitHub 地址:https://github.com/wangzheng0822/ratelimiter4j

     

     

     

    展开全文
  • JMeter 压测 Nginx 并发限流功能

    千次阅读 2019-08-22 09:06:13
    JMeter 简介 Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。...测试部署在 Nginx 上的 web 应用,验证 Nginx 的限流相关功能。 安装 官网下载 http://jmeter.apache.org/download_jmeter....

    JMeter 简介

    Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具。用于对软件做压力测
    试,它最初被设计用于 Web 应用测试,但后来扩展到其他测试领域。本文主要使用 JMeter
    测试部署在 Nginx 上的 web 应用,验证 Nginx 的限流相关功能。

    安装

    官网下载 http://jmeter.apache.org/download_jmeter.cgi

    在这里插入图片描述
    目前最新版本为 5.1.1

    下载解压后运行 ApacheJMeter.jar或.bat

    JMeter 配置

    测试计划

    新建测试计划
    在这里插入图片描述

    线程组

    在测试计划下添加线程组
    在这里插入图片描述
    在这里插入图片描述
    线程数:并发请求数

    时间:多长时间内执行完毕

    循环次数:每个线程在时长内的发送次数

    这样的配置表示为 100 个请求来源在 1 秒内总并发请求 100 次

    HTTP 请求

    在线程组下添加 HTTP 请求
    在这里插入图片描述
    在这里插入图片描述
    这里的配置请求访问 Nginx 转发的服务 URL,如果有请求参数也可以添加

    注意:如果是需要限制总并发数,那么访问的 URL 需要配置为具体的服务地址,如果只配
    置 Nginx 的静态页面地址,测试限流会不成功。

    观察结果树

    在线程组下添加观察结果树
    在这里插入图片描述
    添加汇总报告
    在这里插入图片描述
    用于查询测试结果

    Nginx 配置

    通过在 nginx.conf 文件中的配置,对 Nginx 代理的静态网页访问做限流的功能,在 Nginx 中
    的限流有三种方式:

    limit_conn_zone
    limit_req_zone
    ngx_http_upstream_module

    并发限制

    limit_conn_zone 用来限制同一时间连接数,即并发限制

    场景配置示例

    1. 同一 ip 的客户端,并发限制为 10 个

    http 下的配置:

    http {
    limit_conn_zone $binary_remote_addr zone=perip:10m;

    参数$binary_remote_addr 为限制同一客户端 ip 地址

    参数 zone 为自定义存储区的名字

    10m 是存储会话的大小,1m 能存 32000 个并发会话

    server 下的配置:

    server {
    limit_conn perip 10;

    perip 对应配置的 zone

    如果在 location 下配置则限制此转发路径的请求

    2. Nginx 服务器全局并发限制为 100 个

    http 下的配置:

    http {
    limit_conn_zone $server_name zone=perserver:10m;

    参数$server_name 为限制同一服务器的最大并发

    参数 zone 为自定义存储区的名字

    10m 是存储会话的大小,1m 能存 32000 个并发会话

    server 下的配置:

    server {
    limit_conn perserver 100;

    perserver 对应配置的 zone

    速率限制

    limit_req_zone 用来限制单位时间内的请求数,即速率限制

    场景配置示例

    同一 ip 的客户端,访问速率限制为每秒 5 个

    http 下的配置:

    http {
    limit_req_zone $binary_remote_addr zone=req_one:10m rate=5r/s;

    参数 rate 为每秒的请求上限

    server 下的配置:

    server {
    limit_req zone=req_one burst=5 nodelay;

    req_one 对应配置的 zone

    burst 指超过上限的请求后可以有 N 个进入延迟队列,在请求结束后响应,如果不加则超
    过的直接被拒绝
    nodelay 表示超过上限的请求立即被拒绝,如果没有该字段会造成大量的 tcp 连接请求等

    后端限流

    ngx_http_upstream_module 提供了后端限流功能,1.11.5 版本后非商用版可用

    http 下的配置:
    http {
    upstream node{
    server 127.0.0.1:8080 max_conns=1;
    }

    #超出的请求会返回 502 状态码

    压测

    场景为限制 nginx 服务器全局并发上线为 5

    配置如下:

    http {
    	#对总并发数限制
    	limit_conn_zone $server_name zone=perserver:10m;
    	include mime.types;
    	default_type application/octet-stream;
    	#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
     	# '$status $body_bytes_sent "$http_referer" '
     	# '"$http_user_agent" "$http_x_forwarded_for"';
    	#access_log logs/access.log main;
    	sendfile on;
    	#tcp_nopush on;
    	#keepalive_timeout 0;
    	keepalive_timeout 65;
    	#gzip on;
    	
    server {
    	listen 8080;
    	server_name localhost;
    	limit_conn perserver 5;
    	#charset koi8-r;
    	#access_log logs/host.access.log main;
    	
    	location / {
     		root dist;
    		index index.html;
    	}
    

    启动测试线程组
    在这里插入图片描述
    查看结果树

    在这里插入图片描述
    100 个中成功了 5 个

    查看汇总报告
    在这里插入图片描述
    异常率为 95%

    展开全文
  • 一、古典组织理论 任何一个单位都要处理诸如权力,...只要两个人存在上下从属关系,就意味着阶梯等级关系的存在,这种组织方式有多种行为难度,其中之一是组织中管理行为的影响过程向下流动而非向上流动。 授权
     
    

    一、古典组织理论

    任何一个单位都要处理诸如权力,责任,分工,专业化以及各部分之间相互依存,相互联系等基本要素。

    工作分工

    部门领导把自己单位的工作分成不同层次与职能,然后把人员,资源分配到划分成不同层次的工作岗位上去,称为阶梯程式。

    只要两个人存在上下从属关系,就意味着阶梯等级关系的存在,这种组织方式有多种行为难度,其中之一是组织中管理行为的影响过程向下流动而非向上流动。

    等级与职能分工

    授权

    由工作分工决定的人际关系与职责,以授权的方式分配给职工。

    授权即把权力,义务和责任委托给他人,每个接受这种委托的人就成为管理者的代表,并对被授予的权力承担责任。

    授权允许管理人员扩展自己的影响而不受个人的时间,能力和知识的限制。

    授权是管理的起始活动,假如没有对他人的授权,就没有人去实现管理。

    链钮

    等级,职责以及授权完满实现的结果,便形成了一个把人们连接成一个工作组织的错综复杂的关系网,其中每个层次都有功能小组,通过等级划分与下一层相连,称为链钮概念。

    如果所有的链钮都能有效的起连接作用,组织就会作为一个有机的整体有效的运行。如果链条中任何一点出现薄弱环节,都很难使组织发挥效能。

    李克特链钮概念

     

    权力承认理论

    授权就是权力授予下一级管理人员,然而管理人员能否发挥这种权力的能动性则取决于员工是否心甘情愿的接受或承认这种权力。

    虽然人们在其被授权的范围内有进行正式活动的权力,但是如果员工不是从感情上接受这种权力并且对之做出反应,那么这种权力就变得毫无意义。

    执行与管理者最终的权力和责任

    管理者可以授权并把任务委托给他人,但这绝不意味着管理者可以从其原来接受的委托中解脱出来,一经授权,责任被分作两半,员工只承担执行责任,管理者对于实现工作任务负有最终责任。

    专业化

    职能化势必导致专业化,专业化能够创造出更多的社会财富。其弊端在于人与人际关系越来越复杂,只有健全完美的人际关系,保持密切的协作,才能真正的发挥专业化的优势。

    管理跨度

    所谓管理跨度指的是一个管理人员所直接管理的人数,有限跨度思想是因为管理者的知识,精力,才干都是有限的。

    高塔型组织和平台型组织

    组织中的小跨度管理形成宝塔形组织,大跨度管理形成平台型组织。

    宝塔形组织协调紧密,便于控制,每个管理人员只同为数不多的人交流共事,缺点是上下交流通路较长,容易造成误解。由于上下级朝夕相处,容易导致老板取向,员工有充裕的时间领会上级意图。

    平台型组织具有简单短捷的沟通环节,但是管理人员很难拿出大量的时间面对面指挥如此多的人员。员工有较大的自由度,工作压力小,满意度高。

     

    官僚管理

    官僚制的管理有详尽的规章,严密的控制,森严的等级以及由各种专家实现的高度专业化的职责分工。

    中下层管理人员是非人格化的机械的规章执行者。在这种体制下,管理行动迟缓,文牍繁琐详尽,多层批准,计划执行,压制个人创造性意见,四大特征:高度职业化,森严等级化,规章详尽化,控制非人格化。

    其优点是运行稳定,目标集中统一。

    二、权变组织设计

    机械型与机体型组织

    机械型适应层次分明的组织结构,工作生产经过精心安排,任务一定按照进度进行,每个人的作用明确严格,交流沟通恪守正式的等级渠道,整个组织像一架精心设计的机器。

    机体型组织具有更高的灵活性与开发性,工作任务和角色作用不十分严格,允许人们调整以适应需要,交流与沟通多向化,交流中信息与建议多于指令和决定。权威与影响更多的来自有才干的有能力的实干家,决策非中心化,由不同层次,不同职能部门承担,整个组织更加开放。

     

    生产技术的类型

    伍德沃德把企业分为三种生产类型:

    • 单个的和小批量生产:机床
    • 成群的和大批量生产:定型化生产
    • 程序生产:石油炼制

    成功的批量生产企业多为机械型结构,单件以及按程序生产的企业取得成功者则为机体型结构。

    中等技术需要高组织结构,两级技术需要低组织结构。

    矩阵组织

    这种矩阵型结构是一种组织形式叠加到另一种组织形式上,从而构成对员工个人的两套指挥环节,特别适合于各类技术人员密集的大规模特殊工程项目。

    矩阵组织的运行处于错综复杂的状态中,要求人们扮演多种角色,人们有时候在模棱两可的角色中会遇到挫折和缺乏安全感。这种结构冲淡了权力与权威的作用,更要求协调和控制。

    项目管理人员特别需要适合既能同组织内又能同组织外成员相互交往。项目管理者应当具备同各种不同的集团周旋的边界角色的能力,以获得其他团体的支持,项目负责人的权力往往相对的小于常规组织的管理者,他们的使命是以自己的专长与才干通过沟通交流,开发挑战性任务,协商谈判而出色的完成。

    满足下面的条件可以尝试使用矩阵结构:

    • 特殊项目,尤其是重大项目。
    • 需要多门类专业技术项目,尤其是高级技术
    • 工程项目的运行条件多变
    • 在工作协调,疑难问题的解决以及工程进度方面情况复杂,有重大争议
    • 在专长与知识领域中要求比现有职能具有更高的权威性
    展开全文
  • 摘要 Aragon Network(阿拉贡)是一个由代币控制的数字管理组织,专注于为...Aragon Network的链上组织将会使用Aragon Core进行搭建,它是由一个Solidity语言的去中心化自治组织(DAO)和网页端去中心化应用(dA...

    摘要

    Aragon Network(阿拉贡)是一个由代币控制的数字管理组织,专注于为经济增长创造最好的条件。本质上,Aragon Network是个可以让任意组织、企业家和投资人高效安全协作,并且没有技术漏洞和恶意参与方的生态系统。

    Aragon Network的链上组织将会使用Aragon Core进行搭建,它是由一个Solidity语言的去中心化自治组织(DAO)和网页端去中心化应用(dApp)组成。一开始,Aragon Core会专注于资本化的公司类组织,但它的模块化功能也足够适应其他种类的组织。

    这篇论文首先讨论了一个链上组织的原则和Aragon Core的功能,之后讨论了Aragon Network的代币模型和网络治理模型,最后定义了Network的成功所必须要保证的两个服务:去中心化的法庭 和 升级机制。去中心化的法庭 将会为无法写进智能合约的人际冲突提供仲裁服务。Aragon Core组织的 升级机制 能够适应主流非技术用户的需求。

    Aragon Project建立在过去数十年间、数千人的努力基础上。然而,我们希望特别指出几个极大地影响了Aragon的人们:

    1. Ralph Merkle,是公钥密码学、Merkle树[1]的发明人之一,还有很多其他包括DAO民主等方面的广泛研究,很大地影响了Aragon的思想。
    2. Satoshi Nakamoto,比特币的创造者[2]。
    3. Vitalik Buterin,以太坊的创造者[3],DAO概念的发明者,诸多文章的作者。
    4. 整个以太坊社区的开发者,为了他们关于Web3.0的工作和使dApps成为现实。

    现在的论文早期给一些以太坊社区和区块链社区的个人看过,作者们非常感谢他们为了Aragon Network更好的设计而提出的评论和批评,当然另外剩下的一些错误还是作者的。

    1. 介绍

    1.1. 关于Aragon Core

    Aragon是以太坊区块链上的一个可以让任何人创建和管理任意组织(公司、开源项目、非政府组织NGO、基金会、对冲基金…)的dApp。

    Aragon实现了股东名册、代币转账、投票、职位任命、融资、会计等组织机构的基础功能。Aragon链上组织的行为可以轻易地通过修改章程来自定义。另外,Aragon组织还可以通过连接智能合约的第三方模块进行扩展。

    1.2. 现有限制

    以太坊区块链的诸多特性提供了创造和管理去中心化组织的独有机会,包括记录的不可篡改、透明性和快速交易。但是为了满足人们交易和价值创造的多个需求,还是需要在其之上新加一层,来实现所有这个系统参与者的激励问题。

    在设计Aragon Core时,许多不利于人们使用去中心化方式进行创建、管理和协作的问题被解决掉了,包括:

    • 主观余地:智能合约可以编码大部分可能的合约接口,但人际关系中总有主观的成分,一个完全公正的系统需要考虑不能完全在智能合约里解决的冲突情况。
    • 软件漏洞:软件错误不可避免。软件可能会包含漏洞,所以软件需要很能够容易地升级,而且需要存在一个合理的漏洞报告悬赏机制,用于激励潜在的攻击者来发现漏洞而不是直接攻击。
    • 奖励系统:目前阶段,一些特定的协议和系统的货币化还没有完全确定。一些参与者是促成组织机构的关键,所以需要一个简单的奖励机制。

    2. Aragon Core组织

    2.1 组织说明

    一个组织有很多需求,主要的几个:

    • 身份:这个是首要支柱,因为我们需要在和别人交互前,知晓每个实体的身份。
    • 所有权:股权是一种对创始人、投资者、顾问、合作伙伴和员工的奖励,还可以决定公司的所有权和方向。
    • 投票:公司的股东应该能够对公司的决定发表意见,这里会和所有权相关联。
    • 资本:创业风险很大,需要很多资源来运营和成长,包括以投资或贷款为形式的资本。
    • 人们:组织最终还是由人组成,需要简单的拉拢他们(身份)和奖励他们(薪水)的方法。
    • 外联:一个公司需要瞄准他们的用户来让他们购买公司的商品。在互联网上,有一个域名就足够了。
    • 支付处理:组织需要获利。需要存在一个简单收款的方法。
    • 会计:为了管理费用支出、烧钱速度和商业决定,需要维护一个会计账目。
    • 保险:一个公司有很多风险,通常需要买保险来应对意外事件。

    上面这些有些有依赖关系,最终形成了一个闭环:

    • 身份:没有依赖
    • 所有权:依赖身份,因为你需要确保自己合作的是正确的对象
    • 投票:依赖所有权,因为所有权意味着控制权
    • 资本:依赖投票,因为意味着发行股份
    • 人们:依赖资本,因为你需要招聘人

    2.2. 实现

    A. dApp环境
    以太坊开发环境的一个好处是,有很多种方式可以运行dApps。我们在考虑Aragon的运行环境时,比较了各种选择的优缺点。

    尽管Aragon Core可以作为一个纯净的dApp,运行在上面所有的环境中,我们最终还是用Electron实现了一个本地的程序,它安装简单,用户界面也熟悉,还把MetaMask加了进去。

    我们将会推动这个本地程序作为默认的Aragon体验,我们觉得它对用户很友好,可以给从没听说过以太坊的人介绍,并让他在15分钟内发起一个Aragon Core组织。

    本地Aragon程序 0.3 alpha release

    B. 身份
    我们已经开始集成Keybase,然后你就可以在区块链中设置身份信息了。[Aragon如何落实身份]。当发行新的代币给用户、或者用薪水招聘新的职员时,你需要确定你在给正确的人转账资产或钱。你可以每次都对收款人地址进行手工确认。Aragon会集成不同的身份提供商,现在我们在尝试uPort。我们在Aragon博客[4]里发布了一些关于dApps里身份的想法。

    C. 权限
    由身份引出了权限,我们预期了如下几种:

    • 股东:有获取分红的权利,有转让不超过一定限额的股份给第三方的权利(这个比例通过投票决定的)。
    • 执行人员:有更多的权限,可以做很多事务而不需要经过投票。

    然而,去中心化无信任(或少信任)的组织可以允许和个体之间更宽松的关系。Aragon组织拥有自定义的章程允许定义谁可以执行哪一项业务(比如,经理可以给员工发薪水),或者业务开展的条件(比如,发行新股需要投票)。

    D. 声誉
    声誉在自由市场是非常有价值的,我们希望所有的业务合作都可以被评分。这允许组织可以评判一个承包商,同时承包商也可以评判一家公司。因为我们有所有关系的审计痕迹,可以轻易地追溯真实的交易。如果需要,这里可以完全匿名。

    E. 初始化
    当打开我们dApp后,你首先要创建一个以太坊账户,并安全地备份它,之后你可以选择:

    • 输入你想要操作的公司的合约地址。
    • 部署一个新的公司合约,然后我们dApp会自动跳转到这个合约地址。 初始化的过程需要对任何人都很简单,不仅仅是对加密货币熟悉者。

    F. 所有权
    Aragon Core组织中的所有权是透明和可转让的。每个股东的持股是公开的,并且股东有权转让股份给第三方。Aragon Core中制定了四种功能:

    • 股东名册(和他们的持股比例)
    • 股份转让,任意或有限制地
    • 卖出或代币转账
    • 发行新代币

    组织可以发行有锁定期或其他限制转让条件的代币,所有发行的代币都将遵守ERC20代币标准[5]。这意味着股东的地址可以和一个名字或标签联系起来,或者通过安全的身份生成器获得。

    G. 资本
    创业公司需要快速融资。对于传统创业公司,他们可以找VC、通过第三方众筹(Kickstarter)、申请商业贷款、或麻烦亲戚朋友。Aragon Core组织可以很方便地在交易所发行新股,而不需要依赖第三方,通过直接销售或公开发售的方式:

    • Aragon Core组织可以直接发行股份给某参与方,只要他转了事先谈好金额的货币。
    • 如果一个组织想在市场上公开融资,Aragon可以在市场上公布融资需求,投资人可以先联系后谈判,或直接按照最大上限进行投资。

    H. 奖励
    传统的雇佣和薪水支付有很多不必要的麻烦,Aragon Core简化了这些流程。公司可以在某些条件下用薪水或发行代币来招聘员工,依据时间或任务表现。

    这样就会有比较简单的界面,你可以选择要支付的金额、频率、股份和条件。为了使这个过程更高效,奖励可以是以太坊上的任意代币(使用类似0x协议[6]的去中心化交易所)或任何通过Cosmos或Polkadot可以进行跨链交换的加密货币。

    如果喜欢法币,还有一种选择是自动创建一个用公司资金授权的预充值的信用卡。像Shake这样的方案,有一个API来生成临时的匿名的VISA卡来直接与软件交互。公司可以给员工或承包商进行评分。

    I. 支付
    对于收款支付,客户可以买入加密货币,然后通过ShapeShift的服务转换成企业家的货币。当用户获得加密货币后,他们就可以继续支付了,但其实只需一步操作,所有事情都在后台处理。我们预见到这是初始阶段的常用流程,而不需用户立刻创建他们的钱包。我们会连接加密货币交易所或提供商,来简化用户体验,就像Stripe一样。

    J. 会计
    会计模块是完全集成进去的,我们会最终提供接口给第三方进行形象化的展示,免去重新开发。

    2.3. 模块软件

    Aragon Core是在以太坊上运行一个组织所需的最小实现(参见上一节关于原则的定义)。然而组织有不同的需求,可能Aragon Core里没有拿来就能用的。为了解决这个问题,我们把Aragon Core设计成了,支持在其基础上再开发额外的功能(2.5节有技术细节)

    我们还预见到开发者会在与组织创建或运营无关的场景里使用Aragon Core,潜在的用例有:

    • 政治选举投票模块,只是一个小的预测市场,给投票正确的人以奖励。
    • 供应商支付模块,为供应商的完工或阶段性成果进行支付。
    • 会计模块,拥有丰富可视化数据展示功能的会计模块(超越Aragon Core可以提供的)

    很重要的是,所有的模块都可以使用标准的网站开发技术完成。这使开发者可以使用他们喜欢的任意工具,同时保留强大的沙盒功能和安全性。

    2.4. Aragon Core简介

    Aragon Core里主要是自定义的组织行为模式。简单说,Aragon Core的应用层的主要部分有:

    • 规章系统:谁可以执行某项操作。
    • 治理系统:如何做决定。
    • 资本系统:发行和管理代币。
    • 会计系统:管理资金。

    所有部分一起工作,最终用去中心化的方式达成高效和公平的组织。另外,系统模块化的本质使Aragon Core组织可以根据自身需求自定义软件,或改造Aragon Core去适应其他应用(比如政治选举投票)。Aragon Core会实现一个模块系统,将来更多功能可能建立在其之上。

    3. DAO架构:内核,组件和应用

    接下来的几节讨论去中心化自治组织[7](DAO)的最小化定义,被Aragon Core和Aragon Network采用的DAO的哪些原则,还有DAO内核的基本结构和功能。

    3.1. DAO的最小化定义

    我们认为DAO需要用它的最小含义来定义,那就是:一个组织能够自我更新[8],且维持永久的身份。

    3.2. DAO的原则

    在定义DAO核心的不同组件之前,我们先定义我们要完成的DAO的几个基本原则:

    • 她是。我们需要认识到DAO是作为一个永恒的实体存在于世界上的。
    • 一个DAO会一直存在除非她决定终止,届时就会永远消失。
    • 一个DAO可以自我更新大多数基本组件,而仍被视为同一个实体。
    • 她有。一个DAO拥有内部资本,因此也就拥有财产,原则上都是数字资产的形式(加密货币、代币、或者例如域名IP等的数字资产)。
    • 她做。她可以操作外部世界或自身。她的软件执行用智能合约编写的代码。
    • 她治。在事先编写的行为之外,外部的人们或机器行为也可以引发特定的DAO操作。

    3.3. 内核功能

    内核的核心功能是注册器,安排其他组件的优先级。每一个优先级只能存在一个组件,所以如果在一个已有的优先级设置一个新组件,就会替换掉老组件。内核的责任是接收不同种类的交易,并且使用统一的API分发给其他的组件。目前内核支持的接入交易有:

    • 标准转账,用以太币转账:通过附带了币的以太坊交易。
    • 预授权转账,用以太币转账:内核支持特定发送者对DAO的已签名的预先调用。发送者可以预先签名一个特定交易内容,并提供签名(r,s,v,币值)给某个可以代表他们利益的参与方。这可能需要另一个合约或状态通道来实现。
    • 代币转账,我们认为代币在价值存储方面的功能等同于以太币,并且我们相信在应用程序里代币和以太币一样强大。内核会为所有标准函数支持用代币进行转账(有数据和功能调用)。对于ERC23代币接收接口和ConsenSys的HumanStandardToken的approveAndCall工作流的实现也已经准备好了。

    在前两种情况下,价值通过以太币传输,内核会把以太币代币化为标准代币。这样DAO就可以对任意代币化的资产实现一个统一逻辑,而不用再区分以太币和代币。

    内核会首先询问优先级位于1的组件,询问将要执行的这个操作是否被该实体所允许。如果不被允许,这个交易会在这个时点失败并终止。如果允许,内核会跳转该交易给优先级为1的分发组件(第一个组件)。

    3.4. 内核的基本组成

    A. 分发组件 – 她做Ⅰ
    分发组件的逻辑是会询问层级结构的上层预言家,这个操作是否是被该实体允许的。内核将会在执行任何操作前都询问这个。分发组件会分发进入的任意交易给能够执行该交易的组件,如果没有组件能够执行就失败。她会先检查这个操作是否是给自己的,不是的话按照优先级询问每个组件她们能否处理这个操作,如果可以就分发给她。每个操作将只会被分发给第一个能执行它的组件。

    B. 信息组件 – 她是
    这个组件会负责DAO的自我更新和自我毁灭。她会负责更新DAO内核的根引用和其他组件的注册。

    C. 保险箱组件 – 她有
    这个组件负责保管DAO拥有的资金和资产(代币资产),还负责怎么花费它们。

    D. 代币组件 – 她治
    这个组件负责追踪所有的能够管理DAO的治理代币,还包括一些添加、替换、删除代币的逻辑。

    E. 应用组件 – 她做Ⅱ
    DAO的应用层会是自身的组件,这个组件将只会与其他组件有很少的交互(沙盒)。应用层这里有该组织的大部分业务逻辑。还会安装不同的应用(以太坊智能合约的形式)来为DAO提供更多功能性。我们会创建一个模块或应用商店,组织可以简单地安装可复用的组件。

    4. Aragon Network

    Aragon Network(AN)会是第一个去中心化自治组织,其目标是充当数字司法权,使组织的企业家和投资人可以非常容易地操作。

    Aragon Network会从一个经过投票而成的非常简单的宪法启动,新的法律会通过治理机制被添加进来。

    Aragon Network很重要的角色是保证网络内组织的成员关系,并检查他们是否遵守了发布的规则。

    网络会通过积累用户在组织内的交易手续费来运转,这些手续费会贡献为网络的内部资产,由治理组织随意支配。这些资金的主要流向是给网络的服务提供者,这对网络的运行很必要。这些服务主要有:

    • 开发支持运行去中心化组织的Aragon Core合约
    • 一个去中心化的法庭(附录A),可以用来冻结组织
    • 一个为所有Aragon Core提供合约升级和漏洞悬赏的服务

    我们可以说Aragon Network会提供能为组织带来繁荣的所有事情,如果要跟现实世界做个类比的话,最好的例子就是今天的特拉华州为公司、投资人和企业家所做的事情。Aragon Network会是更有效率的区块链上的数字特拉华州。

    5. Aragon Network代币,ANT

    跟货币代表了宏观经济的财富一样,ANT代表了去中心化经济体Aragon的财富。

    5.1. Network的启动和ANT发行

    为了网络的启动,一个不限定上限数量的ANT会按照预先设定的随着时间而增长的价格进行售卖。ICO筹集的资金会交给Aragon基金会来资助Aragon Core和Aragon Network的开发(图5.1B)

    售卖结束的某些时候,只要他们觉得实现了初始的目标,并且已经安全了,社区成员就会通过多重签名的方式部署Aragon Network。网络就在这个时刻启动,并且ANT持有者可以通过治理机制达成决议。

    图5.1A:Aragon Network部署机制


    图5.1B:Aragon代币售卖机制

    5.2. 持续的代币模型

    在初始售卖和网络部署后,ANT会持续增发。增发新的代币会有成本,作为加入网络而支付的一部分手续费会被用来资助发行新代币。这就有了向Aragon组织支付手续费的激励机制,组织贡献更多也就会收获更多ANT,也就意味着该组织在网络决策中会有更大的影响力。

    增发新代币所需的费用由ANT代币持有者决定。这会是一个持续的决定,同时要考虑到经济学里的供需原则。如果增发新币成本过低,越来越多的代币就会进入流通,直到供应严重超出了需求。这个通胀的方案会让单个ANT代币的价格下降。最终,我们认为代币持有者将会决定出一个健康的均衡通胀率。通过同等对待每一个持有者的意见,市场会正确地反映最好的增发费用。

    5.3. Network的治理机制

    最开始,Aragon Network会是一种流动的民主[10](换句话说,就像无政府状态[11]),来决定代币发行、资金分配、网络规则(看图5.3中关于ANT代币持有者能做的决定示例)。

    这意味着通过提案和投票系统,Network被部署在链上治理机制的基础上。这个机制决定了允许建立提案来升级这个机制本身。

    ANT发行:

    • 为ANT收入设置税收比例(可能低点,以鼓励使用ANT)
    • 给全体代币持有者分配资金
    • 从网络中关停或冻结不遵守规章的组织

    资金分配:

    • 将资金作为一次性奖励分配
    • 为服务提供者重复性地分配资金
    • 给全体代币持有者分配资金

    网络规则:

    • 建立宪法的规章
    • 废除规章
    • 从网络中关停或冻结不遵守规章的组织

    5.4. Network的适应性

    Aragon Network会提供一系列使去中心化组织广泛应用的基本服务,我们也希望她尽可能地保持全球化和开放。

    Aragon Network有一些基本的宪法和治理方法,每个人都可以在Aragon里建立另一个只使用法律子集的网络。例如你可以创建一个组织,加入到Aragon Network,然后投票产生一个专门用于你自己组织的法律子集。或者该组织可以把Aragon Network的基本宪法服务作为一个框架,然后建立一个规则子集来治理组织间的关系。

    5.5. 代币将来的应用

    ANT会是所有网络服务的原生代币,不论是治理机制还是其他功能。比如在法庭功能中,持有者能够使用它们的代币来帮助裁决并获得奖励。

    5.6. 代币技术特性

    ANT会兼容ERC20标准,只是另外增加一些比如能否复制和锁定期等的特性。

    6. 总结

    AN通过提供能够在大范围内运行,且能够使组织高效运作的服务,解决了运行完全去中心化组织的核心问题。它提供了一种可以让网络达到公共利益最大化的机制。


    图6:Aragon Network流程

    附录:Network服务

    我们定义了AN组织需要雇佣的两个基础的网络服务,这些可能会或也可能不会由Aragon团队开发。下面不是协议的细节,而是我们研究AN需要的功能的简要介绍。

    附录A:Aragon Network的去中心化仲裁系统

    1. 驱动因素

    在市场上进行交易时,会因为出现信任问题而导致股东之间的争论。多亏了智能合约无需信任的本质,许多表面问题没有了,因为条款可以事先约定,所以无人可以再事后取巧。但还有一些条款不能用代码描述,争论也就会随之而来。

    我们思考下这两个例子:

    • 一个投资人投资了一个组织并且有投票权。组织的创始人作恶并且把投资人所有的钱打到他自己的账户。如果这是个Aragon组织,投资人就希望可以规定,如果交易金额超过一定的上限,就必须经过更大范围的投票。
    • 一个SaaS组织的创始人雇佣了一个的新系统管理员,然后雇主就可以有他们易受攻击的用户数据库的访问权限,就可以进行盗窃并用于私利。以太坊上运行的合约无法知道发生了什么,因此Aragon组织在处理人际间的信任问题时很无能为力。

    我们相信需要有一个可以让参与者选择性加入的系统,来对抗这些人际行为。传统的解决方案是政府权力的仲裁。由于Aragon组织是运行在以太坊上的无政府环境中,因此我们想出了更好的方案。

    2. 一个去中心化,透明的,可分叉的司法机关

    一个Aragon Network Jurisdiction(ANJ司法机关)有如下几个合约功能:

    • 提供两方任意争端的仲裁。
    • 允许ANT持有者根据一些基本规则,对于将要发生的仲裁进行投票。

    2.1. 实体

    实体(比如组织或雇员)可以通过把他们的控制权交给司法机关的合约,而参与到网络中来。实体之间可以进行交互,例如一个组织和雇员可以用任何密码学的方式约定更多的细节(相比于智能合约里已有的),比如在某一时间,给一个共同的文件同时签名。

    2.2. ANT在司法机关中的作用

    • 对于众多决定的投票权,比如替换最高法院的一系列基本法则。
    • 作为发起仲裁所需缴纳的押金。

    2.3. 法官

    想要参与仲裁的实体可以缴纳一个押金,之后就能充当法官。

    3. 仲裁机制

    为了发起一个仲裁,申请人需要缴纳押金,如果这个案子解决了,押金就会返回给他们,否则就会被拿走。

    仲裁诉状可以引发冻结,也就是立即冻结被告的合约(比如一个攻击者正在利用一个漏洞)。只有发起人是被告组织的股东才可以提交这种诉状(图A)。

    对于人类的裁判,法官的决定都分两步提交,来保证在做决策过程中的隐私化,而且不会影响到其他法官的决策。这种结构也用在了以太坊域名服务(ENS)的竞拍中,流程如下:

    • 决定如何裁判后,法官会生成一个秘密的随机数,同时提交判决结果的摘要给法庭,之后保存好该随机数。
    • 等裁判的期限过后,法官必须披露他们的随机数和判决结果,然后任何人都可以验证这个判决结果的。如果判决结果和随机数披露失败,会惩罚他们交的押金。
    • 为了阻止法官勾结,如果任何人提前披露了某个法官的秘密随机数,那么这个法官就会被惩罚,而押金的一部分会给披露人。

    3.1. 人类法官

    当仲裁发起的时候:

    • 从交了押金的法官中,随机选出5个。如果其中某个拒绝参加就会被轻微处罚,然后再选一个。
    • 法官们看下ANJ的基本规则、该组织特有的规则、还有其他参与方加密后发送的材料。
    • 他们提交判决结果,附带秘密随机数。
    • 等待仲裁期过后,他们公布判决结果和秘密随机数。
    • 押金会退给这些法官,外加把对败诉一方的处罚作为奖励。
    • 投了正确票的法官会被奖励一些不能转账的声誉代币,而投错票的法官会被严重处罚。

    3.2. 预测市场

    如果申请人不满足那5个人类法官的判决,他们可以发起上诉(交更多的押金),网络中所有的法官都可以参与。对于这种情况,我们可以借鉴Augur或Gnosis。
    当仲裁发起的时候:

    • 法官们看下ANJ的基本规则、该组织特有的规则、还有其他参与方加密后发送的材料。
    • 他们提交判决结果,附带秘密随机数。
    • 等待仲裁期过后,他们公布判决结果和秘密随机数。
    • 押金会退给这些法官,外加把对败诉一方的处罚作为奖励。
    • 如果结果和第一次判决的不一样,所有上轮判决中投错票的法官都会被严厉惩罚。

    3.3. 最高法院

    如果申请人不满意前两轮的判决,他们可以继续上诉至最高级(交非常多的押金),然后由ANJ中最高声誉的9个法官组成最高法院。
    当仲裁发起的时候:

    • 法官们看下ANJ的基本规则、该组织特有的规则、还有其他参与方加密后发送的材料。
    • 他们提交判决结果,附带秘密随机数。
    • 等待仲裁期过后,他们公布判决结果和秘密随机数。
    • 押金会退给这些法官,外加把对败诉一方的处罚作为奖励。
    • 如果结果和第一次判决的不一样,所有上轮判决中投错票的法官都会被严厉惩罚。

    这些法官会被支付由ANT持有者决定的薪水ANF(图B)。

    3.4. 激励设计

    看了上面描述的系统设计,你也许会争论说法官和整个网络会从经济激励上,不通过申请人的请求,然后他们就可以拿到他的押金来平分。

    这也使申请人知道,如果他们的案子不够清晰就很可能会被否决。但法官也知道,如果他们撒谎或为了他们的私利而否决,他们的代币和押金就会被罚掉。

    系统的设计是尽量不鼓励仲裁的发生,且尽量为被侵犯利益的群体主持正义。

    4. 总结

    ANJ提供了解决人际主观纠纷的工具。它是Aragon组织激励机制的一部分,因为:

    • 参与该组织业务交互的人们希望特殊的保证,以防合约有未覆盖到的信任漏洞。
    • 通过提交一次仲裁,可以冻结一些有漏洞合约的全部活动,直到问题解决。

    ANJ的投票流程是透明的,但在某些情况下,一些股东之间可能会分叉,这也激发了他们的治理模型产生作用。我们相信ANJ会创造显著的网络效应,因为:

    • 和其他组织的交互也需要签约,因此引入更多可能的信任漏洞。
    • 如果它是扩展的,那么所有参与方(包括投资人)都会熟悉它的基本规则。


    图A:仲裁流程


    图B:ANJ激励

    附录B:Aragon Network的智能合约安全和升级策略

    智能合约的最大的优势同时也是最大的劣势是:合约一旦被创建,就会永远在区块链上,而且永远按照开发者写的代码执行,然而那并不一定是合约创建者意愿的真实表达。

    最重要的一个例子是The DAO被黑事件,一个预期之外的操作组合,导致合约转了很多钱给黑客。在这个案例中,被迫执行了一次协议级别的硬分叉来阻止资金流失。

    我们创立Aragon是为了让人们可以运行DAO,从更广的范围考虑,也希望完全没听说过以太坊的人可以同样使用。

    我们需要建立一个系统,让不熟悉细节的用户也可以确定性地运行他们的组织,并且他们可以永远运行软件的最新版本,尽可能不被攻击。

    这个服务对于Aragon Network里所有组织的参与者都能用,但是组织可以决定多大程度上依赖它,从完全控制升级(必须经过组织授权),到完全自动升级(保证我安全,我什么都不懂),到中间状态(不要给我自动进行普通升级,只在有安全漏洞时自动升级)。

    这个工作还在进行中,但如果我们希望成千的DAO可以安全运行,这就是个需要添加的重要的功能。

    1. 组件

    下面描述的是我们目前计划的保证网络集成度的几个不同组件。

    1.1. 可升级智能合约的代理库

    目前部署智能合约系统通常依赖一种人工代码安全性审计,部署到网络上后就只能希望它不会再出问题了。因为代码本质上是不可更改的法律,不可能用回退来升级,以修复几个漏洞或更好表达开发者的原始想法。

    或者本身也不是智能合约作者的问题,而是由于协议的共识算法修改了,合约就变得很容易受到攻击。这会是个严重的问题,如果一个系统完全不能升级,而我们又希望今天写的合约会永远好用。这在简单系统里也许不是个问题,但对于Aragon Network里如此复杂的DAO组织来讲就是了。

    我们已经调研了好几个月这个问题,我们目前的解决方案是尽可能多地把系统业务逻辑压缩到Solidity开发库中。做库驱动开发[J. Izquierdo, 2017],然后不直接在合约里持久连接它们,而是使用代理调度[M. Araoz, 2017]合约,来让每个组织知道应该连接的库版本。我们在和最好的智能合约安全审计公司Zeppelin合作,来创建这个可升级库的代理系统,关于这方面我们最近也发表了文章。

    这项技术还会使一些小组织的合约非常轻量,只有一些数据存储,然后跳转他们的逻辑到所有组织都在用的库里。

    如果发现漏洞,一个新版本的库会被部署,然后网络内所有的组织根据他们的设置都会被升级:

    • 自动升级
    • 通知升级,但需要授权
    • 什么都不做,组织自行决定是否升级

    1.2. Network范围的漏洞悬赏

    让不同组织调用一个同样合约的负面效应是,他会引发黑客集中攻击。乐观的角度,也会让这些股东联合起来抵御攻击。

    网络内会有一个漏洞悬赏计划,覆盖网络内组织需要调用的所有合约。历史表明如果人们在经济上被鼓励做好事的时候,大部分发现漏洞的人都会为了拿奖励而报告,而不是去伤害更多的人。

    我们在考虑把漏洞悬赏做的自动化,比如为组织的合约写一个测试,如果有人可以打破测试,就会自动支付赏金。

    网络的可升级机制也很适应漏洞悬赏计划,因为可以把从漏洞被发现到被解决的升级路径最小化。

    1.3. 全网安全停机

    如果一个服务漏洞被发现,Aragon Network可以停止所有组织的合约(如果所有组织都被牵连了),然后开展调查和代码升级,再重新恢复服务。

    我们会开发一个机器人,它会监听所有发送到Aragon组织的公开交易,如果发现异常行为或非预期状态,就判断为有可能的黑客,它就会通知Aragon团队的人,如果机器人认为盗贼很恶劣,需要立即采取措施,它会停止所有的组织,再由负责的人了解情况。

    这意味着在30秒之内就可以停止一个对全体组织的攻击,升级后会立即修复。如果是错误警告,负责的人会重启服务,停机时间不超过10分钟。

    1.4. 应对组织内恶意用户的司法操作

    在上面ANJ司法组织的介绍里,网络内的所有组织都同意跟ANJ去中心化法庭所绑定。一旦一个案子被创建,法庭可以改变或撤销组织的操作。这个只是股东的一个防护措施。通过提供一个足够的押金,一个组织的股东可以提交一个诉状给ANJ,然后预防性地冻结组织。如果法庭决定这个诉状不合法,这个人就会失去他的押金而交给法庭(部分给该组织)。

    1.5. 权衡

    跟生活中大部分好事情一样,安全性问题需要权衡。我们可以想象打造一个dApp的三角形,和Zooko的三角形(图A)很像,有安全性、去中心化、易用性为三个角,着重某一个肯定会疏远其他两个。我们发现三个特性都很重要,但也很难创造一个系统,让每个用户或组织可以任意选择他们愿意做哪方面的妥协。

    A. 安全性
    安全性的含义是及时解决漏洞和威胁的能力。

    B. 去中心化
    升级机制的问题在于最终还是由一个可信组织领导软件升级,这是非常中心化的。但网络可以选择添加一个投票机制,只有当代码被完全检查后才能发布升级。这也是我们的升级机制为什么是可选的原因,有些用户不想要这么高的安全性,而只接受对于自己组织的更新。

    C. 易用性
    如果把安全性和去中心化调到最优,肯定会降低用户希望理解Aragon来升级自己组织的易用性,造成很大的障碍。

    2. 总结

    有了以上描述的方法,Aragon Network可以保证:

    • 将来的漏洞修复和增强可以添加进合约里。
    • 由于漏洞悬赏计划、全网停机功能、和ANJ司法仲裁机关,严重的漏洞攻击会被最小化。
    展开全文
  • 说明:本文来自一篇出处不明的老文章...三媒体播放方式 1单播 2组播 3点播与广播 四业界中媒体系统的简介 一、音视频编解码技术1、MPEG4 MPEG全称是Moving Pictures Experts Group,它是“动态图象专家组”的英文
  • 控制和数据

    万次阅读 2018-03-06 00:04:48
    数据——描述程序运行过程中数据的流转方式及其行为状态 在MVC模型中,Model层的本质就是“数据”,数据在MVC的各个构成要素中流转并且在不同的层次扮演着不同的角色。当程序运行起来之后,我们会发现正是由于...
  • 无线自组织网络基础知识

    千次阅读 2020-05-06 21:47:31
    目录第一章 绪论1.1 无线自组织网络概述1.1.1 无线自组织网络的定义及分类1.1.2无线自组织网络的主要特点1.1.3无线自组织网络的应用与发展1.无线自组织网络的应用2.无线自组织网络的起源和发展1.2典型的无线自组织...
  • 组织网络(Ad hoc)

    万次阅读 多人点赞 2016-10-03 20:08:28
    组织网络(Ad Hoc)是一种移动通信和计算机网络相结合的网络,是移动计算机网络的一种,用户终端可以在网内随意移动而保持通信。作为一种多跳的临时性自治系统,在军事、民用、商用等许多重要领域都具有独特优势,...
  • 工作引擎

    万次阅读 2015-07-24 14:24:53
    工作的概念起源于生产组织和办公自动化领域。它是针对日常工作中具有固定程序的活动而提出得一个概念。它的主要特点是使处理过程自动化,通过将工作分解成定义良好的任务、角色,按照一定的规则和过程来执行这些...
  • 移动媒体技术及其应用发展方向

    千次阅读 2010-06-03 14:33:00
    一、现状分析  在手机增值业务市场,短信、彩信、彩e等虽然了交互、24小时不间断等不同于传统媒体的特点,但传输的主要是静态为主的图像和文字内容,影响了其媒体作用的充分发挥。随着最终用户需求的...
  • 黑客组织Anonymous(匿名者)

    千次阅读 2014-07-13 06:57:49
    本文关注的是世界著名的黑客组织Anonymous(匿名者)。...他们自己的网站和IRC频道,定期举行聚会,专注于在线头脑风暴,而不是做黑产。该组织使用一个投票系统,选择用最好的方式处理任何情况。这个著名的黑客组织,擅
  • [vue] 从0到1自己构架一个vue项目,说说哪些步骤、哪些重要插件、目录结构你会怎么组织 1 项目类型 前端的项目目前来看主要分为小程序开发,H5页面开发、PC官网、后台管理系统开发、Native开发。不同的项目所涉及...
  • 配置邮箱和邮件大小限制 !

    万次阅读 2011-03-06 11:21:00
     配置邮箱和邮件大小限制 A、邮箱大小设置 emc---组织配置---双击mailbox database---限制 邮箱大小默认限制为2.4g,当大小超过1.99g的时候会发出警告,超过2.09g时限制发送,超过2.4g时禁止接受...
  • SaaS营销网站的组织结构

    千次阅读 2016-06-21 10:30:50
    人们常常将自己的所有精力放在为网站制定精美、反响力强的页面上——但是用户对单个页面的实际体验常常取决于网站的整体组织结构。如果你的网站组织欠妥,……
  • java解析xml文件四种方式

    千次阅读 2008-07-10 00:08:00
    DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或...
  • Red5 处理架构设计解析

    万次阅读 2012-06-28 15:32:42
     处理是 Red5 容器的一个核心。本文是一个 Red5 处理的设计文档,来自于 Red5 团队的邮件列表,作者是 Steven Gong,起稿于 2006 年 4 月。本文的原文标题是《关于处理架构设计的介绍》,原文可以点击这里...
  • 公众号:如何通过一封恶意邮件追踪幕后黑客组织 paper链接:如何通过一封恶意邮件追踪幕后黑客组织 一、前言 近日朋友收到一封来自海外的钓鱼邮件,委托我帮忙分析。因此我对钓鱼者身份和攻击路径进行了一次详细的...
  • 工作介绍

    千次阅读 2015-06-04 08:12:07
    工作是针对工作中具有固定程序的常规活动而提出的一个概念,通过将工作活动分解定义良好的任务、过程、角色和规则来进行执行和监控,达到提高生产组织水平和工作效率的目的,工作技术为企业更好地实现经营目标...
  • USB电源过保护芯片应用介绍

    千次阅读 2020-03-13 16:04:31
    USB2.0的电流大小是500mA,USB3.0的电流大小是900mA,因为USB相关组织规定了USB应用的安全性,因此对USB供电实现过保护的功能,因此才产生USB过保护芯片这个东西,当然保险丝可以实现同样的功能但是保险丝难以...
  • 媒体传输协议和TS

    千次阅读 2012-09-18 22:48:34
    在网上传输音频、视频等多媒体信息目前主要两种方式:下载和流式传输。采用下载方式,用户需要先下载整个媒体文件,然后才能进行播放。由于网络带宽的限制,下载常常要花很长时间,所以这种处理方式延迟很大。 而...
  • “知识工作者无法在组织结构下得到有效管理” ————彼得.德鲁克     技术团队的组织文化、制度建设和有效沟通 ... 团队文化建设很重要的意义...只有组织内成员责任感、使命感才会对其工作持续专注。制度约束
  • java 工作开发框架比较

    千次阅读 2014-08-07 15:58:03
    它是另一款遵循WfMC的XPDL标准开源工作引擎,并且同时遵循OMG组织的Workflow Management Facility规范。在所有开源工作引擎中,Shark的体系最为完备和复杂。其一直秉承着“模块化”的思想,所以比较容易扩展。...
  • 媒体技术 rtp/rtcp/rtsp资料精华!

    千次阅读 2014-09-01 14:40:59
    媒体技术 媒体是指在网络中使用流式(Sreaming)传输技术进行传输的连续时基媒体,如音频数据或视频数据,而不是一种新的媒体。媒体技术(或称为流式媒体技术)就是把连续的影像和声音信息经过压缩处理后...
  • Oracle EBS R12多组织(多OU)访问架构

    千次阅读 2014-08-05 23:30:08
     多组织架构实现了经营单位(OU)的数据安全性,在底层数据表中一列ORG_ID来记录数据所属的经营单一,所有多OU的基表都是以”_ALL”结尾,对应经营单位屏蔽信息的视图创建在 APPS数据库模式下。 多OU的视图通过...
  • 工作任务调度系统:Apache DolphinScheduler

    万次阅读 多人点赞 2019-10-28 16:21:51
    Apache DolphinScheduler(目前处在孵化阶段,原名为EasyScheduler)是一个分布式、去中心化、易扩展的可视化DAG工作任务调度系统,其致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开...
  • 批处理与处理详解

    千次阅读 2019-09-18 16:34:50
    Samza本身很适合多个团队需要使用(但相互之间并不一定紧密协调)不同处理阶段的多个数据组织。Samza可大幅简化很多处理工作,可实现低延迟的性能。如果部署需求与当前系统不兼容,也许并不适合使用,但如果...
  • 在OS中引入进程后,一方面使系统的吞吐量和资源的利用率得到提升,另一方面也使得系统变得复杂,如果没有合理的方式对进程进行妥善的管理,必然会引起进程对系统资源的无序竞争,使系统变得混乱;为了实现对并发进程...
  • SPRING工作引擎

    千次阅读 2008-03-17 19:15:00
    在对工作简单介绍之后,将要介绍在基本工作场景中基于Spring的工作API的使用。(2,800个英文单词; 2005/4/11) 许多J2EE应用程序要求在一个和主机分离的上下文中执行处理过程。在许多情况下,这些后台的进程...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,447
精华内容 48,178
关键字:

属于限流组织方式的有