-
分配性质是什么意思_如何理解生产决定分配
2020-12-18 21:19:30这两者共同决定了产品分配的关系,第一个层次解释了具体的分配方式的决定因素,第二个层次解释了分配的性质的决定因素。”“生产决定分配,但生产又包括两个方面,即生产要素的所有制结构和生产要素的配置方式,前者...1
如何理解生产决定分配
马克思所讲的生产要素的分配包括两层含义:
第一,
从分配过程
看,是指生产要素的分配方式,即资源配置方式;第二,从分配结果
看,
是指生产要素所有权的分配。
这两者共同决定了产品分配的关系,
第一个层次解释了具体的分配方式的决定因素,
第二个层次解释了分
配的性质的决定因素。
”
“生产决定分配,但生产又包括两个方面,即
生产要素的所有制结构和生产要素的配置方式,前者决定分配的性
质,说明要素所有者得到报酬的权利,后者决定分配的方式,说明要
素所有者得到报酬的权利所实现的程度。
”①对此,笔者认为,有几
点是需要提出来讨论的。
一、马克思的“生产要素分配”的含义究竟是什么?
崔向阳认为,
马克思所讲的生产要素分配的第一层含义是指
“生
产要素的分配方式,即资源配置方式”
。这里明显存在对马克思的误
解。
对于生产要素分配的含义以及生产要素分配对产品分配的决定作
用,马克思是这样论述的:
“消费资料的任何一种分配,都不过是生
产条件本身分配的结果。
而生产条件的分配,
则表现生产方式本身的
性质,例如,资本主义生产方式的基础就在于:物质的生产条件以资
本和地产的形式掌握在非劳动者的手中,
而人民大众则只有人身的生
产条件,即劳动力。既然生产的要素是这样分配的,那么自然而然地
就要产生消费资料的现在这样的分配。
”②这段论述再清楚不过地表
-
什么是VLAN
2013-10-23 09:59:12比如逻辑接口F0/0.1就分配IP地址192.168.1.1/25,用于销售部,而F0/0.2就分配IP地址192.168.1.129/25,用于企划部。这样就等于用一个物理端口确实现了两个逻辑接口的功能,这样就将原本只能划分一个网段的情形,... -
即无论是对独立需求的物料,还是相关需求的物料,物料需求计划都要解决“需求什么?现有什么?还缺什么?...
2009-02-28 23:23:38由于物料需求计划是把主生产计划排产的产品分解为各个零部件的生产计划和采购件的采购计划,因此,制订物料需求计划前就必须具备以下的基本数据:第一项数据是主生产计划,它指明在某一计划时间段内应生产出的各种... -
你真的理解灰度发布了吗?
2020-06-14 21:51:49本篇中,我们来讨论一个重要概念:...在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度本篇中,我们来讨论一个重要概念:“灰度发布”,及其解决方案。
基本概念
“灰度发布”的基本含义如下:
灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
来自 百度百科
可以发现,“灰度发布”主要针对的是“产品特性”。那么什么叫产品特性呢?从我们技术的角度来看,大多数人可能理解为“功能接口”,就像这样:
对于用户(这里的用户不一定只是局限于使用产品的人,也可能是使用产品的其他产品或单位,泛指一切需要使用我们产品的角色),我们根据我们的业务需求,进行不同流量的转发。
比如可能一开始30%的请求流量打给新版功能,70%打给旧版功能。在用户反馈良好的情况下,慢慢提升新版功能的接入流量,直到彻底完成新旧更替。
理论与现实的冲突与思考
可能会有同学觉得,灰度发布不是很简单直接吗,有什么好冲突的?
冲突点主要来源以下几个方面:
怎么设计流量的分配
之前的例子中,说的是从30-70的流量比例开始,慢慢调大新系统的接入流量比例,直到彻底完成新旧更替。
如果一切都很符合理想,没有什么外部约束的话,最好的方式一定是从0-100的比例开始,慢慢调整到100-0,是最安全最有稳定性的。
但现实总是有外部约束,例如:
-
来自效率的约束
产品经理:这个新功能三天内必须完全上线!
-
来自成本的约束
谁负责慢慢调节流量?谁来监控?或者交给算法来做,谁来写这个算法?涉及到的成本会很多。
那么如何权衡效率、成本与稳定性呢,就需要我们有充分的运维经验了。而这方面其实与开发是分不开的,我们开发者对于代码和业务复杂性的评估,将是我们去为灰度发布keep balance的重要依据。
怎么控制灰度的粒度
在这里为我们提出两个问题:
-
“系统级”还是“接口级”?
在V1版本的产品和V2版本的产品之间,进行灰度是十分合理的。但有时候并非只是这么简单,例如:
V1和V2之间有A、B、C三个新功能接口的迭代。其中A功能比较简单,也不是核心功能,基本不太需要灰度就可以发布;而C功能是非常核心且复杂的重点功能,一旦出bug可能导致严重的线上问题,需要谨慎发布。
那么如果我们只针对V1和V2进行灰度,就会发现整个版本迭代的效率是以A、B、C三个功能中最慢的那个为准的。我们是否有可能针对A、B、C分别进行灰度呢?这样就可以迅速上线A这样比较简单的新功能,而对于复杂的C功能则延缓彻底上线的速度。
那这样的话,是不是就意味着我们需要V1,V2,V3,V4四个版本?其中V2、3、4分别对A、B、C进行灰度。这样未免成本太高了。
思考一下,应该如何去做?
-
“接口级”还是“代码级”?
如果刚才提到的C接口内部代码逻辑很复杂,但旧版本的C接口和新版本的C接口代码复用率很高。我们有必要开发出两种版本的C接口,然后再进行灰度吗?是不是可以只针对那一部分不一样的代码进行灰度呢?
如果想只针对一部分代码进行灰度,既然不再是针对接口了,那我们该如何把控流量呢?
停下来,再思考一下。在后面的解决方案中,我们再继续探讨。
实战解决方案
现在有了这样一个需求:
我们希望能够灵活地解决灰度问题,针对代码级的变更进行灰度发布。
与此同时,我们希望这种变更是可控的,是可以热配置的。例如现在某个功能的流量中,30%走的旧代码,70%走的新代码。我希望不需要通过手动重新修改并部署项目,就可以非常方便地将流量比例转为50-50,直到最后转为100-0。在这段流量比例的变更期间,都不需要我重新部署项目。
这将是一个非常灵活且低成本的灰度发布解决方案。应该如何去做呢?
一、准备外部配置源,实现热配置
为了让我们能够热配置我们的灰度,那么这种配置就一定不能硬编码在我们的程序中。而且最好能以可读性较高、且较易编写的方式放在我们的配置文件/配置平台中,
毕竟我们现在想针对“代码级”的新旧版本进行灰度配置,那么可以想象,当需要灰度的代码块很多的时候,这种配置也会很多。如果不能以较好的格式存储,就会非常杂乱而不易维护。
那么应该如何设计这种配置的数据格式呢?比如可以像这样:
serviceId 服务名 strategyType 灰度策略类型 percent 百分比 otherParam… 其他相关参数…… loginService PERCENT 50 具体解释一下:
-
serviceId 服务名
唯一标识我们需要灰度的代码块。因为不同的服务可能需要不同的灰度策略(比如当A服务希望现在是70%灰度的时候,B服务希望目前只是30%的灰度),所以以服务id为唯一标识。
-
strategyType 灰度策略类型
在我们的示例中,只有PERCENT——按百分比进行灰度这种类型。但其实灰度策略可以有很多种,比如黑名单策略,白名单策略……
-
percent 百分比
显然,这个percent字段是为了PERCENT策略类型服务的。我们需要知道该服务想要的百分比值,才能为它提供百分比灰度策略服务。
-
otherParam… 其他相关参数……
这个与percent参数类似,只是可能是为其他的灰度策略服务的。例如如果采取一个白名单策略,也许我们就需要一个whitelist参数,看看有哪些用户可以纳入白名单。
那么这种数据结构,我们可以存在我们的数据库中,也可以写入我们的配置文件中,等等。
然后我们的程序则会通过访问这个配置,执行相应的灰度逻辑,来实现我们的灰度发布。
而通过我们人为修改这个配置数据,就可以实现灰度的热配置。
二、控制权交由业务方,实现粒度自由
既然要针对**“代码级“**进行灰度,也就是应该会设计有如下逻辑:
//判断接下来是走旧流程还是走新流程 boolean gray = isGray(this.serviceId); //如果判断为false,走旧流程 if(gray == false){ //doSomething... } //如果判断为true,走新流程 if(gray == true){ //doSomething... }
而
isGray(this.serviceId)
方法应当抽象出来,专门设计到一个模块中,允许所有业务方进行调用。isGray(this.serviceId)
要做些什么呢?- 获取到调用方的serviceId(通过方法传参获取到了)
- 根据serviceId,到配置文件/平台中获取相关数据,包括strategyType,percent等等
- 根据strategyType,并配合其他参数,执行相应的灰度逻辑
- 返回true或false,告知业务方本次调用应当走入新旧哪个流程
也就是说,我们可以自设计一个通用灰度模块,在里面实现isGray方法。
而具体的调用,则交给业务方。
每个业务方是否想要灰度,想要走什么灰度策略,都完全可以由自己来控制。而具体的策略逻辑,则由我们的通用灰度模块来提供即可。
总结
在真正接触灰度发布的实践之前,我们对灰度的理解是浅薄片面的。
而到小型系统上,或许我们也只会考虑到使用nginx等工具,利用负载均衡功能来实现灰度。
其实灰度的”水“还是挺深的,希望这样一篇文章可以开阔你的视野,打通你的思维。
-
-
3G的标准与原理相关资料
2009-03-16 15:18:2451. WCDMA系统中物理信道的功率分配方式 41 52. AAL2/AAL5等ATM连接的区别 43 53. 单模光纤和多模光纤简要介绍 43 54. 什么是无线资源管理,主要的技术有哪些? 44 55. WCDMA终端是如何实现与系统的同步的? 45 56. ... -
asp.net oa hr 进销存 财务源码
2018-12-28 14:51:21工作日志 :主要用于记录个人工作生活中大小事情的备忘,相当于备忘录功能,后期将会添加到期提醒功能,提示您什么时间做什么事情。 手机绑定登陆:主要提供用户登陆账号和手机绑定,利用手机号码登陆. 2、任务... -
云点滴客户解决方案 v1.0.0.rar
2019-08-29 10:58:02主要用于记录个人工作生活中大小事情的备忘,相当于备忘录功能,后期将会添加到期提醒功能,提示您什么时间做什么事情。 二、任务管理:工作交流**台 指派任务 主要用于公司内部成员之间进行任务指派的功能,包括... -
云点滴客户关系管理CRM OA系统 v2.4.zip
2019-07-09 04:27:06主要用于记录个人工作生活中大小事情的备忘,相当于备忘录功能,后期将会添加到期提醒功能,提示您什么时间做什么事情。 二、任务管理:工作交流平台 指派任务 主要用于公司内部成员之间进行任务指派的功能,包括... -
云点滴客户关系管理CRM OA系统 v1.02.13.rar
2019-08-29 11:05:46主要用于记录个人工作生活中大小事情的备忘,相当于备忘录功能,后期将会添加到期提醒功能,提示您什么时间做什么事情。 二、任务管理:工作交流**台 指派任务 主要用于公司内部成员之间进行任务指派的功能,包括... -
4.1.5 用过哪些Map类,都有什么区别,HashMap是线程安全的吗,并发下使用的Map是什么,他们内部原理分别是什么,比如存储方式,hashcode,扩容,默认容量等。 4.1.6 JAVA8的ConcurrentHashMap为什么放弃了分段锁,有...
-
《计算机操作系统》期末复习指导
2009-12-30 10:57:551、为什么要引入“进程” (1)进程调度属于低级处理机管理,即确定系统中哪个进程将获得CPU;而作业调度属于高级处理机管理,即确定系统中哪些作业将获得CPU。 (2)进程是一个具有一定独立功能的程序... -
哈佛大学职业经理MBA全套讲义
2008-10-08 19:15:54让我们来考虑一种熟悉的产品,麦克唐纳德公司的汉堡包。一个准备购买汉堡包的人,同时还可能面临着其它选择,其中包括别的快速食品(如肯德基炸鸡),中速食品(如有桌布和女招待的餐馆),慢速食品(如家庭烹调的食物)... -
2019数据运营思维导图
2019-03-29 21:34:09作用 精准营销 分析产品潜在用户,针对特定群体利用短信、邮件等方式进行营销 用户统计 如购买某类书籍人数 TOP10 数据挖掘 定义 把散乱数据转换成有价值信息的过程 效果评估 完善产品运营,提升服务质量 其实这也就... -
数据运营思维导图
2018-04-26 14:24:22分析产品潜在用户,针对特定群体利用短信、邮件等方式进行营销 用户统计 如购买某类书籍人数 TOP10 数据挖掘 定义 把散乱数据转换成有价值信息的过程 效果评估 完善产品运营,提升服务质量 其实这也就相当于... -
Java经典入门教程pdf完整版
2020-09-03 17:00:26Classloader能够加强代似的安全性,主要方式是:把本机上的类和內络资源类相分离, 在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。 4:字节码(byte-code)校验 功能是对 class文件的代码进行校验,保证... -
说明:目前,数据分析是一个非常热门的方向,因为不管是互联网行业还是传统行业都已经积累了大量的数据,现在需要的就是从这些数据中提取有价值的信息,以便打造更好的产品或者为将来的决策提供支持。 给初学者的几...
-
软件工程教程
2012-07-06 23:10:29传统的手工方式对图书信息的管理已越来越不能适应社会发展的需要,尤其是随着计算机网络和Internet的普及,运用先进的信息管理系统对信息进行科学化和网络化管理,已成为图书信息管理系统发展的趋势。 系统的研发... -
Oracle Database 9i10g11g编程艺术:深入数据库体系结构(第2版)--详细书签版
2013-02-03 11:42:539.5.3 为什么不能分配一个新日志 289 9.5.4 块清除 291 9.5.5 日志竞争 294 9.5.6 临时表和redo/undo 296 9.6 分析undo 299 9.6.1 什么操作会生成最多和最少的undo 299 9.6.2 ORA-01555: snapshot too old ... -
C#微软培训教材(高清PDF)
2009-07-30 08:51:1717.1 .Net 框架结构提供的 I/O 方式 .215 17.2 文件存储管理 .217 17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码... -
C#微软培训资料
2014-01-22 14:10:1717.1 .Net 框架结构提供的 I/O 方式 .215 17.2 文件存储管理 .217 17.3 读 写 文 件 .222 17.4 异步文件操作 .227 17.5 小 结 .234 第十八章 高 级 话 题 .235 18.1 注册表编程 .235 18.2 在 C #代码... -
让Oracle跑得更快:Oracle10g性能分析与优化思路--详细书签版
2013-02-06 16:23:02Hint指通过人为的方式来约束SQL的执行计划,让它按照我们希望的方式来执行,以达到我们需要的目的—改善性能或者仅仅是试验以对比SQL的执行性能。 这一章将讨论Oracle数据库中的大多数Hint。 第7章 分析及... -
Oracle 9i & 10g编程艺术:深入数据库体系结构(09年度畅销榜TOP50)(08年度畅销榜TOP50)--详细书签版
2013-02-06 18:24:209.5.4 为什么不能分配一个新日志? 310 9.5.5 块清除 312 9.5.6 日志竞争 315 9.5.7 临时表和redo/undo 317 9.6 分析undo 321 9.6.1 什么操作会生成最多和最少的undo? 321 9.6.2 ORA-01555: snapshot too old... -
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 5、String是最基本的数据类型... -
c语言编写单片机技巧
2009-04-19 12:15:17要实现单片机与电脑的连接,最简单的方式就是采用串口通讯,但需要加一颗RS-232芯片。 17. 在ARM编程中又应当如何? 答:就以嵌入式系统观念为例,一般嵌入式处理器可以分为三类:嵌入式微处理器、嵌入式微... -
php高级开发教程说明
2008-11-27 11:39:22行是干什么用的,它们在什么条件下执行,它们所要求的设置。即使你缺乏背景知识,遇到了 一个错综复杂的算法,你也能很快看出它所从事的任务,以及它的风格。 举个例子,然后说“照着做”总是很容易的,但我想这一章... -
java 面试题 总结
2009-09-16 08:45:34多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? ... -
Oracle Database 11g数据库管理艺术--详细书签版
2012-09-30 01:09:451.3.2 开发、测试和产品数据库 7 1.4 培训和认证 7 1.4.1 培训 7 1.4.2 认证 8 1.4.3 Oracle DBA的资源和组织 10 1.4.4 Oracle示例 11 1.4.5 Oracle数据库的两天DBA课程 11 1.4.6 Oracle MetaLink ... -
华为编程开发规范与案例
2008-09-04 16:44:5610、分配资源是否已正确释放 第28页 【案例1.10.1】 第28页 【案例1.10.2】 第29页 【案例1.10.3】 第30页 【案例1.10.4】 第32页 【案例1.10.5】 第33页 【案例1.10.6】 第35页 【案例1.10.7】 第38页 11、防止资源... -
计算机二级公共基础知识
2011-04-30 14:00:09顺序存储方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里,结点之间的关系由存储单元的邻接关系来体现。 链式存储结构就是在每个结点中至少包含一个指针域,用指针来体现数据... -
Reversing:逆向工程揭密
2010-06-21 17:00:47逆向工程是指将工程制品(比如汽车、喷气发动机或者软件程序)以揭示其最底层的细节(如其设计和架构)的方式进行解构的过程。这与研究自然现象的科学研究有些类似,区别就在于一般没有人会把科学研究看做逆向工程,...
-
GUI系列之:Gensim是什么GUI
-
plugins的介绍使用
-
access应用的3个开发实例
-
交叉推广:移动游戏的新推广模式
-
自动化测试Python3+Selenium3+Unittest
-
1996年scarlet.github.io-源码
-
项目1--源码
-
goit-markup-hw-02-源码
-
Android主流三方库源码分析(九、深入理解EventBus源码)
-
PPT大神之路高清教程
-
dubbo简单demo
-
质数距离
-
市场篮子分析-源码
-
MySQL Router 实现高可用、负载均衡、读写分离
-
Jsplumb从入门到实战
-
SpringBootFastCampus:SpringBoot FastCampus研究-源码
-
#力扣 LeetCode1037. 有效的回旋镖 @FDDLC
-
SAT求解器-源码
-
翁恺老师的城堡游戏python版.rar
-
Windows系统管理