精华内容
下载资源
问答
  • 建筑工程项目施工管理创新工作思路方法.doc
  • 介绍了在市场经济环境下,思想工作创新的必要性。指出思想工作创新要在机制创新思路创新方法创新和载体创新上下功夫,并以工作实践中遇到的问题为例,分析思想工作创新给企业发展带来的益处。
  • 计算机行业的创新思路

    千次阅读 2007-10-12 14:31:00
    IT业在现阶段好像被游戏软件占有了,在这个时候,如何面对正常软件在市场上有好的业绩,就...创新不是拘泥于一些狭隘的不可能或懒惰,要有创新的思想,用创新方法去充分利用现有的知识条件创造出有利于社会的东西。

     IT业在现阶段好像被游戏软件占有了,在这个时候,如何面对正常软件在市场上有好的业绩,就不得不考虑些好的方法去解决这些问题。首先,我们这些计算机工作者必须打开思路,不能将思路只局限于计算机本身,还有更多的关注其他行业的发展,从而找到合适的方法去解决问题。

    创新不是拘泥于一些狭隘的不可能或懒惰,要有创新的思想,用创新的方法去充分利用现有的知识和条件创造出有利于社会的东西。

    展开全文
  • 电商秒杀系统设计思路和实现方法

    万次阅读 多人点赞 2017-05-26 00:06:35
    可以通过校验码达到一定的方法,这就要求校验码足够安全,不被破解,采用的方式有:秒杀专用验证码,电视公布验证码,秒杀答题。 3 秒杀架构原则 尽量将请求拦截在系统上游 传统秒杀系统之所以挂,请求都压倒了后端...

    1 秒杀业务分析

    1. 正常电子商务流程

      (1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货

    2. 秒杀业务的特性

      (1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;

    2 秒杀技术挑战

    假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:

    1. 对现有网站业务造成冲击

      秒杀活动只是网站营销的一个附加活动,这个活动具有时间短,并发访问量大的特点,如果和网站原有应用部署在一起,必然会对现有业务造成冲击,稍有不慎可能导致整个网站瘫痪。

      解决方案:将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离

    2. 高并发下的应用、数据库负载

      用户在秒杀开始前,通过不停刷新浏览器页面以保证不会错过秒杀,这些请求如果按照一般的网站应用架构,访问应用服务器、连接数据库,会对应用服务器和数据库服务器造成负载压力。

      解决方案:重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务

    3. 突然增加的网络及服务器带宽

      假设商品页面大小200K(主要是商品图片大小),那么需要的网络和服务器带宽是2G(200K×10000),这些网络带宽是因为秒杀活动新增的,超过网站平时使用的带宽。

      解决方案:因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在CDN,同样需要和CDN服务商临时租借新增的出口带宽

    4. 直接下单

      秒杀的游戏规则是到了秒杀才能开始对商品下单购买,在此时间点之前,只能浏览商品信息,不能下单。而下单页面也是一个普通的URL,如果得到这个URL,不用等到秒杀开始就可以下单了。

      解决方案:为了避免用户直接访问下单页面URL,需要将改URL动态化,即使秒杀系统的开发者也无法在秒杀开始前访问下单页面的URL。办法是在下单页面URL加入由服务器端生成的随机数作为参数,在秒杀开始的时候才能得到

    5. 如何控制秒杀商品页面购买按钮的点亮

      购买按钮只有在秒杀开始的时候才能点亮,在此之前是灰色的。如果该页面是动态生成的,当然可以在服务器端构造响应页面输出,控制该按钮是灰色还 是点亮,但是为了减轻服务器端负载压力,更好地利用CDN、反向代理等性能优化手段,该页面被设计为静态页面,缓存在CDN、反向代理服务器上,甚至用户浏览器上。秒杀开始时,用户刷新页面,请求根本不会到达应用服务器。

      解决方案:使用JavaScript脚本控制,在秒杀商品静态页面中加入一个JavaScript文件引用,该JavaScript文件中包含 秒杀开始标志为否;当秒杀开始的时候生成一个新的JavaScript文件(文件名保持不变,只是内容不一样),更新秒杀开始标志为是,加入下单页面的URL及随机数参数(这个随机数只会产生一个,

      这个JavaScript文件非常小,即使每次浏览器刷新都访问JavaScript文件服务器也不会对服务器集群和网络带宽造成太大压力。即所有人看到的URL都是同一个,服务器端可以用redis这种分布式缓存服务器来保存随机数),并被用户浏览器加载,控制秒杀商品页面的展示。这个JavaScript文件的加载可以加上随机版本号(例如xx.js?v=32353823),这样就不会被浏览器、CDN和反向代理服务器缓存

    6. 如何只允许第一个提交的订单被发送到订单子系统

      由于最终能够成功秒杀到商品的用户只有一个,因此需要在用户提交订单时,检查是否已经有订单提交。如果已经有订单提交成功,则需要更新 JavaScript文件,更新秒杀开始标志为否,购买按钮变灰。事实上,由于最终能够成功提交订单的用户只有一个,为了减轻下单页面服务器的负载压力, 可以控制进入下单页面的入口,只有少数用户能进入下单页面,其他用户直接进入秒杀结束页面。

      解决方案:假设下单服务器集群有10台服务器,每台服务器只接受最多10个下单请求。在还没有人提交订单成功之前,如果一台服务器已经有十单了,而有的一单都没处理,可能出现的用户体验不佳的场景是用户第一次点击购买按钮进入已结束页面,再刷新一下页面,有可能被一单都没有处理的服务器处理,进入了填写订单的页面,可以考虑通过cookie的方式来应对,符合一致性原则。当然可以采用最少连接的负载均衡算法,出现上述情况的概率大大降低。

    7. 如何进行下单前置检查

      • 下单服务器检查本机已处理的下单请求数目:

      如果超过10条,直接返回已结束页面给用户;

      如果未超过10条,则用户可进入填写订单及确认页面;

      • 检查全局已提交订单数目:

      已超过秒杀商品总数,返回已结束页面给用户;

      未超过秒杀商品总数,提交到子订单系统;

    8. 秒杀一般是定时上架

      该功能实现方式很多。不过目前比较好的方式是:提前设定好商品的上架时间,用户可以在前台看到该商品,但是无法点击“立即购买”的按钮。但是需要考虑的是,有人可以绕过前端的限制,直接通过URL的方式发起购买,这就需要在前台商品页面,以及bug页面到后端的数据库,都要进行时钟同步。越在后端控制,安全性越高。

      定时秒杀的话,就要避免卖家在秒杀前对商品做编辑带来的不可预期的影响。这种特殊的变更需要多方面评估。一般禁止编辑,如需变更,可以走数据订正多的流程。

    9. 减库存的操作

      有两种选择,一种是拍下减库存 另外一种是付款减库存;目前采用的“拍下减库存”的方式,拍下就是一瞬间的事,对用户体验会好些。

    10. 库存会带来“超卖”的问题:售出数量多于库存数量

      由于库存并发更新的问题,导致在实际库存已经不足的情况下,库存依然在减,导致卖家的商品卖得件数超过秒杀的预期。方案:采用乐观锁

      update auction_auctions set
      quantity = #inQuantity#
      where auction_id = #itemId# and quantity = #dbQuantity#
      

      还有一种方式,会更好些,叫做尝试扣减库存,扣减库存成功才会进行下单逻辑:

      
      update auction_auctions set 
      quantity = quantity-#count# 
      where auction_id = #itemId# and quantity >= #count#
      
    11. 秒杀器的应对

      秒杀器一般下单个购买及其迅速,根据购买记录可以甄别出一部分。可以通过校验码达到一定的方法,这就要求校验码足够安全,不被破解,采用的方式有:秒杀专用验证码,电视公布验证码,秒杀答题

    3 秒杀架构原则

    1. 尽量将请求拦截在系统上游

      传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小【一趟火车其实只有2000张票,200w个人来买,基本没有人能买成功,请求有效率为0】。

    2. 读多写少的常用多使用缓存

      这是一个典型的读多写少的应用场景【一趟火车其实只有2000张票,200w个人来买,最多2000个人下单成功,其他人都是查询库存,写比例只有0.1%,读比例占99.9%】,非常适合使用缓存

    4 秒杀架构设计

    秒杀系统为秒杀而设计,不同于一般的网购行为,参与秒杀活动的用户更关心的是如何能快速刷新商品页面,在秒杀开始的时候抢先进入下单页面,

    而不是商品详情等用户体验细节,因此秒杀系统的页面设计应尽可能简单。

    商品页面中的购买按钮只有在秒杀活动开始的时候才变亮,在此之前及秒杀商品卖出后,该按钮都是灰色的,不可以点击。

    下单表单也尽可能简单,购买数量只能是一个且不可以修改,送货地址和付款方式都使用用户默认设置,没有默认也可以不填,允许等订单提交后修改;

    只有第一个提交的订单发送给网站的订单子系统,其余用户提交订单后只能看到秒杀结束页面。

    要做一个这样的秒杀系统,业务会分为两个阶段,第一个阶段是秒杀开始前某个时间到秒杀开始, 这个阶段可以称之为准备阶段

    用户在准备阶段等待秒杀; 第二个阶段就是秒杀开始到所有参与秒杀的用户获得秒杀结果, 这个就称为秒杀阶段吧。

    4.1 前端层设计

    首先要有一个展示秒杀商品的页面, 在这个页面上做一个秒杀活动开始的倒计时, 在准备阶段内用户会陆续打开这个秒杀的页面, 并且可能不停的刷新页面

    这里需要考虑两个问题:

    1. 第一个是秒杀页面的展示

      我们知道一个html页面还是比较大的,即使做了压缩,http头和内容的大小也可能高达数十K,加上其他的css, js,图片等资源,如果同时有几千万人参与一个商品的抢购,一般机房带宽也就只有1G~10G,网络带宽就极有可能成为瓶颈,所以这个页面上各类静态资源首先应分开存放,然后放到cdn节点上分散压力,由于CDN节点遍布全国各地,能缓冲掉绝大部分的压力,而且还比机房带宽便宜。

    2. 第二个是倒计时

      出于性能原因这个一般由js调用客户端本地时间,就有可能出现客户端时钟与服务器时钟不一致,另外服务器之间也是有可能出现时钟不一致。客户端与服务器时钟不一致可以采用客户端定时和服务器同步时间,这里考虑一下性能问题,用于同步时间的接口由于不涉及到后端逻辑,只需要将当前web服务器的时间发送给客户端就可以了,因此速度很快,就我以前测试的结果来看,一台标准的web服务器2W+QPS不会有问题,如果100W人同时刷,100W QPS也只需要50台web,一台硬件LB就可以了~,并且web服务器群是可以很容易的横向扩展的(LB+DNS轮询),这个接口可以只返回一小段json格式的数据,而且可以优化一下减少不必要cookie和其他http头的信息,所以数据量不会很大,一般来说网络不会成为瓶颈,即使成为瓶颈也可以考虑多机房专线连通,加智能DNS的解决方案;web服务器之间时间不同步可以采用统一时间服务器的方式,比如每隔1分钟所有参与秒杀活动的web服务器就与时间服务器做一次时间同步

    3. 浏览器层请求拦截

      (1)产品层面,用户点击“查询”或者“购票”后,按钮置灰,禁止用户重复提交请求;

      (2)JS层面,限制用户在x秒之内只能提交一次请求;

    4.2 站点层设计

    前端层的请求拦截,只能拦住小白用户(不过这是99%的用户哟),高端的程序员根本不吃这一套,写个for循环,直接调用你后端的http请求,怎么整?

    (1)同一个uid,限制访问频度,做页面缓存,x秒内到达站点层的请求,均返回同一页面

    (2)同一个item的查询,例如手机车次,做页面缓存,x秒内到达站点层的请求,均返回同一页面

    如此限流,又有99%的流量会被拦截在站点层。

    4.3 服务层设计

    站点层的请求拦截,只能拦住普通程序员,高级黑客,假设他控制了10w台肉鸡(并且假设买票不需要实名认证),这下uid的限制不行了吧?怎么整?

    (1)大哥,我是服务层,我清楚的知道小米只有1万部手机,我清楚的知道一列火车只有2000张车票,我透10w个请求去数据库有什么意义呢?对于写请求,做请求队列,

      每次只透过有限的写请求去数据层,如果均成功再放下一批,如果库存不够则队列里的写请求全部返回“已售完”

    (2)对于读请求,还用说么?cache来抗,不管是memcached还是redis,单机抗个每秒10w应该都是没什么问题的;

    如此限流,只有非常少的写请求,和非常少的读缓存mis的请求会透到数据层去,又有99.9%的请求被拦住了。

    1. 用户请求分发模块:使用Nginx或Apache将用户的请求分发到不同的机器上。

    2. 用户请求预处理模块:判断商品是不是还有剩余来决定是不是要处理该请求。

    3. 用户请求处理模块:把通过预处理的请求封装成事务提交给数据库,并返回是否成功。

    4. 数据库接口模块:该模块是数据库的唯一接口,负责与数据库交互,提供RPC接口供查询是否秒杀结束、剩余数量等信息。

    • 用户请求预处理模块

      经过HTTP服务器的分发后,单个服务器的负载相对低了一些,但总量依然可能很大,如果后台商品已经被秒杀完毕,那么直接给后来的请求返回秒杀失败即可,不必再进一步发送事务了,示例代码可以如下所示:

      
      package seckill;
      import org.apache.http.HttpRequest;
      /**
      * 预处理阶段,把不必要的请求直接驳回,必要的请求添加到队列中进入下一阶段.
      */
      public class PreProcessor {
        // 商品是否还有剩余
        private static boolean reminds = true;
        private static void forbidden() {
            // Do something.
        }
        public static boolean checkReminds() {
            if (reminds) {
                // 远程检测是否还有剩余,该RPC接口应由数据库服务器提供,不必完全严格检查.
                if (!RPC.checkReminds()) {
                    reminds = false;
                }
            }
            return reminds;
        }
        /**
         * 每一个HTTP请求都要经过该预处理.
         */
        public static void preProcess(HttpRequest request) {
            if (checkReminds()) {
                // 一个并发的队列
                RequestQueue.queue.add(request);
            } else {
                // 如果已经没有商品了,则直接驳回请求即可.
                forbidden();
            }
        }
      }
      
      • 并发队列的选择

      Java的并发包提供了三个常用的并发队列实现,分别是:ConcurrentLinkedQueue 、 LinkedBlockingQueue 和 ArrayBlockingQueue。

      ArrayBlockingQueue是初始容量固定的阻塞队列,我们可以用来作为数据库模块成功竞拍的队列,比如有10个商品,那么我们就设定一个10大小的数组队列。

      ConcurrentLinkedQueue使用的是CAS原语无锁队列实现,是一个异步队列,入队的速度很快,出队进行了加锁,性能稍慢。

      LinkedBlockingQueue也是阻塞的队列,入队和出队都用了加锁,当队空的时候线程会暂时阻塞。

      由于我们的系统入队需求要远大于出队需求,一般不会出现队空的情况,所以我们可以选择ConcurrentLinkedQueue来作为我们的请求队列实现:

      package seckill;
      import java.util.concurrent.ArrayBlockingQueue;
      import java.util.concurrent.ConcurrentLinkedQueue;
      import org.apache.http.HttpRequest;
      public class RequestQueue {
        public static ConcurrentLinkedQueue<HttpRequest> queue = new ConcurrentLinkedQueue<HttpRequest>();
      }
      
    • 用户请求模块

      
      package seckill;
      import org.apache.http.HttpRequest;
      public class Processor {
        /**
         * 发送秒杀事务到数据库队列.
         */
        public static void kill(BidInfo info) {
            DB.bids.add(info);
        }
        public static void process() {
            BidInfo info = new BidInfo(RequestQueue.queue.poll());
            if (info != null) {
                kill(info);
            }
        }
      }
      class BidInfo {
        BidInfo(HttpRequest request) {
            // Do something.
        }
      }
      
    • 数据库模块

      数据库主要是使用一个ArrayBlockingQueue来暂存有可能成功的用户请求。

      
      package seckill;
      import java.util.concurrent.ArrayBlockingQueue;
      /**
      * DB应该是数据库的唯一接口.
      */
      public class DB {
        public static int count = 10;
        public static ArrayBlockingQueue<BidInfo> bids = new ArrayBlockingQueue<BidInfo>(10);
        public static boolean checkReminds() {
            // TODO
            return true;
        }
        // 单线程操作
        public static void bid() {
            BidInfo info = bids.poll();
            while (count-- > 0) {
                // insert into table Bids values(item_id, user_id, bid_date, other)
                // select count(id) from Bids where item_id = ?
                // 如果数据库商品数量大约总数,则标志秒杀已完成,设置标志位reminds = false.
                info = bids.poll();
            }
        }
      }
      

    4.4 数据库设计

    4.4.1 基本概念

    概念一“单库”

    输入图片说明

    概念二“分片”

    输入图片说明

    分片解决的是“数据量太大”的问题,也就是通常说的“水平切分”。一旦引入分片,势必有“数据路由”的概念,哪个数据访问哪个库。路由规则通常有3种方法:

    1. 范围:range

      优点:简单,容易扩展

      缺点:各库压力不均(新号段更活跃)

    2. 哈希:hash 【大部分互联网公司采用的方案二:哈希分库,哈希路由】

      优点:简单,数据均衡,负载均匀

      缺点:迁移麻烦(2库扩3库数据要迁移)

    3. 路由服务:router-config-server

      优点:灵活性强,业务与路由算法解耦

      缺点:每次访问数据库前多一次查询

    概念三“分组”

    输入图片说明

    分组解决“可用性”问题,分组通常通过主从复制的方式实现。

    互联网公司数据库实际软件架构是:又分片,又分组(如下图)

    输入图片说明

    4.4.2 设计思路

    数据库软件架构师平时设计些什么东西呢?至少要考虑以下四点:

    1. 如何保证数据可用性;

    2. 如何提高数据库读性能(大部分应用读多写少,读会先成为瓶颈);

    3. 如何保证一致性;

    4. 如何提高扩展性;

    • 1. 如何保证数据的可用性?

      解决可用性问题的思路是=>冗余

      如何保证站点的可用性?复制站点,冗余站点

      如何保证服务的可用性?复制服务,冗余服务

      如何保证数据的可用性?复制数据,冗余数据

      数据的冗余,会带来一个副作用=>引发一致性问题(先不说一致性问题,先说可用性)

    • 2. 如何保证数据库“读”高可用?

      冗余读库

      输入图片说明

      冗余读库带来的副作用?读写有延时,可能不一致

      上面这个图是很多互联网公司mysql的架构,写仍然是单点,不能保证写高可用。

    • 3. 如何保证数据库“写”高可用?

      冗余写库

      输入图片说明

      采用双主互备的方式,可以冗余写库带来的副作用?双写同步,数据可能冲突(例如“自增id”同步冲突),如何解决同步冲突,有两种常见解决方案:

      1. 两个写库使用不同的初始值,相同的步长来增加id:1写库的id为0,2,4,6...;2写库的id为1,3,5,7...;

      2. 不使用数据的id,业务层自己生成唯一的id,保证数据不冲突;

    实际中没有使用上述两种架构来做读写的“高可用”,采用的是“双主当主从用”的方式

    输入图片说明

    仍是双主,但只有一个主提供服务(读+写),另一个主是“shadow-master”,只用来保证高可用,平时不提供服务。 master挂了,shadow-master顶上(vip漂移,对业务层透明,不需要人工介入)。这种方式的好处:

    1. 读写没有延时;

    2. 读写高可用;

    不足:

    1. 不能通过加从库的方式扩展读性能;

    2. 资源利用率为50%,一台冗余主没有提供服务;

    那如何提高读性能呢?进入第二个话题,如何提供读性能。

    • 4. 如何扩展读性能

      提高读性能的方式大致有三种,第一种是建立索引。这种方式不展开,要提到的一点是,不同的库可以建立不同的索引

      输入图片说明

      写库不建立索引;

      线上读库建立线上访问索引,例如uid;

      线下读库建立线下访问索引,例如time;

      第二种扩充读性能的方式是,增加从库,这种方法大家用的比较多,但是,存在两个缺点:

      1. 从库越多,同步越慢;

      2. 同步越慢,数据不一致窗口越大(不一致后面说,还是先说读性能的提高);

      实际中没有采用这种方法提高数据库读性能(没有从库),采用的是增加缓存。常见的缓存架构如下:

      输入图片说明

      上游是业务应用,下游是主库,从库(读写分离),缓存

      实际的玩法:服务+数据库+缓存一套

      输入图片说明

      业务层不直接面向db和cache,服务层屏蔽了底层db、cache的复杂性。为什么要引入服务层,今天不展开,采用了“服务+数据库+缓存一套”的方式提供数据访问,用cache提高读性能

      不管采用主从的方式扩展读性能,还是缓存的方式扩展读性能,数据都要复制多份(主+从,db+cache),一定会引发一致性问题

    • 5. 如何保证一致性?

      主从数据库的一致性,通常有两种解决方案:

      1. 中间件

      输入图片说明

      如果某一个key有写操作,在不一致时间窗口内,中间件会将这个key的读操作也路由到主库上。这个方案的缺点是,数据库中间件的门槛较高(百度,腾讯,阿里,360等一些公司有)。

      2. 强制读主

      输入图片说明

      上面实际用的“双主当主从用”的架构,不存在主从不一致的问题

      第二类不一致,是db与缓存间的不一致

      输入图片说明

      常见的缓存架构如上,此时写操作的顺序是:

      (1)淘汰cache;

      (2)写数据库;

      读操作的顺序是:

      (1)读cache,如果cache hit则返回;

      (2)如果cache miss,则读从库;

      (3)读从库后,将数据放回cache;

      在一些异常时序情况下,有可能从【从库读到旧数据(同步还没有完成),旧数据入cache后】,数据会长期不一致。解决办法是“缓存双淘汰”,写操作时序升级为:

      (1)淘汰cache;

      (2)写数据库;

      (3)在经验“主从同步延时窗口时间”后,再次发起一个异步淘汰cache的请求;

      这样,即使有脏数据如cache,一个小的时间窗口之后,脏数据还是会被淘汰。带来的代价是,多引入一次读miss(成本可以忽略)。

      除此之外,最佳实践之一是:建议为所有cache中的item设置一个超时时间

    • 6. 如何提高数据库的扩展性?

      原来用hash的方式路由,分为2个库,数据量还是太大,要分为3个库,势必需要进行数据迁移,有一个很帅气的“数据库秒级扩容”方案。

      如何秒级扩容?

      首先,我们不做2库变3库的扩容,我们做2库变4库(库加倍)的扩容(未来4->8->16)

      输入图片说明

      服务+数据库是一套(省去了缓存),数据库采用“双主”的模式

      扩容步骤:

      第一步,将一个主库提升;

      第二步,修改配置,2库变4库(原来MOD2,现在配置修改后MOD4),扩容完成;

      原MOD2为偶的部分,现在会MOD4余0或者2;原MOD2为奇的部分,现在会MOD4余1或者3;数据不需要迁移,同时,双主互相同步,一遍是余0,一边余2,两边数据同步也不会冲突,秒级完成扩容!

      最后,要做一些收尾工作:

      1. 将旧的双主同步解除;

      2. 增加新的双主(双主是保证可用性的,shadow-master平时不提供服务);

      3. 删除多余的数据(余0的主,可以将余2的数据删除掉);

      输入图片说明

      这样,秒级别内,我们就完成了2库变4库的扩展。

    5 大并发带来的挑战

    5.1 请求接口的合理设计

    一个秒杀或者抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后台请求接口

    通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上。这个后端接口,必须能够支持高并发请求,同时,非常重要的一点,必须尽可能“快”,在最短的时间里返回用户的请求结果。为了实现尽可能快这一点,接口的后端存储使用内存级别的操作会更好一点。仍然直接面向MySQL之类的存储是不合适的,如果有这种复杂业务的需求,都建议采用异步写入

    输入图片说明

    当然,也有一些秒杀和抢购采用“滞后反馈”,就是说秒杀当下不知道结果,一段时间后才可以从页面中看到用户是否秒杀成功。但是,这种属于“偷懒”行为,同时给用户的体验也不好,容易被用户认为是“暗箱操作”。

    5.2 高并发的挑战:一定要“快”

    我们通常衡量一个Web系统的吞吐率的指标是QPS(Query Per Second,每秒处理请求数),解决每秒数万次的高并发场景,这个指标非常关键。举个例子,我们假设处理一个业务请求平均响应时间为100ms,同时,系统内有20台Apache的Web服务器,配置MaxClients为500个(表示Apache的最大连接数目)。

    那么,我们的Web系统的理论峰值QPS为(理想化的计算方式):

    20*500/0.1 = 100000 (10万QPS)
    

    咦?我们的系统似乎很强大,1秒钟可以处理完10万的请求,5w/s的秒杀似乎是“纸老虎”哈。实际情况,当然没有这么理想。在高并发的实际场景下,机器都处于高负载的状态,在这个时候平均响应时间会被大大增加

    就Web服务器而言,Apache打开了越多的连接进程,CPU需要处理的上下文切换也越多,额外增加了CPU的消耗,然后就直接导致平均响应时间增加。因此上述的MaxClient数目,要根据CPU、内存等硬件因素综合考虑,绝对不是越多越好。可以通过Apache自带的abench来测试一下,取一个合适的值。然后,我们选择内存操作级别的存储的Redis,在高并发的状态下,存储的响应时间至关重要。网络带宽虽然也是一个因素,不过,这种请求数据包一般比较小,一般很少成为请求的瓶颈。负载均衡成为系统瓶颈的情况比较少,在这里不做讨论哈。

    那么问题来了,假设我们的系统,在5w/s的高并发状态下,平均响应时间从100ms变为250ms(实际情况,甚至更多):

    20*500/0.25 = 40000 (4万QPS)
    

    于是,我们的系统剩下了4w的QPS,面对5w每秒的请求,中间相差了1w。

    然后,这才是真正的恶梦开始。举个例子,高速路口,1秒钟来5部车,每秒通过5部车,高速路口运作正常。突然,这个路口1秒钟只能通过4部车,车流量仍然依旧,结果必定出现大塞车。(5条车道忽然变成4条车道的感觉)。

    同理,某一个秒内,20*500个可用连接进程都在满负荷工作中,却仍然有1万个新来请求,没有连接进程可用,系统陷入到异常状态也是预期之内。

    输入图片说明

    其实在正常的非高并发的业务场景中,也有类似的情况出现,某个业务请求接口出现问题,响应时间极慢,将整个Web请求响应时间拉得很长,逐渐将Web服务器的可用连接数占满,其他正常的业务请求,无连接进程可用。

    更可怕的问题是,是用户的行为特点,系统越是不可用,用户的点击越频繁,恶性循环最终导致“雪崩”(其中一台Web机器挂了,导致流量分散到其他正常工作的机器上,再导致正常的机器也挂,然后恶性循环),将整个Web系统拖垮。

    5.3 重启与过载保护

    如果系统发生“雪崩”,贸然重启服务,是无法解决问题的。最常见的现象是,启动起来后,立刻挂掉。这个时候,最好在入口层将流量拒绝,然后再将重启如果是redis/memcache这种服务也挂了,重启的时候需要注意“预热”,并且很可能需要比较长的时间

    秒杀和抢购的场景,流量往往是超乎我们系统的准备和想象的。这个时候,过载保护是必要的。如果检测到系统满负载状态,拒绝请求也是一种保护措施。在前端设置过滤是最简单的方式,但是,这种做法是被用户“千夫所指”的行为。更合适一点的是,将过载保护设置在CGI入口层,快速将客户的直接请求返回

    6 作弊的手段:进攻与防守

    秒杀和抢购收到了“海量”的请求,实际上里面的水分是很大的。不少用户,为了“抢“到商品,会使用“刷票工具”等类型的辅助工具,帮助他们发送尽可能多的请求到服务器。还有一部分高级用户,制作强大的自动请求脚本。这种做法的理由也很简单,就是在参与秒杀和抢购的请求中,自己的请求数目占比越多,成功的概率越高

    这些都是属于“作弊的手段”,不过,有“进攻”就有“防守”,这是一场没有硝烟的战斗哈。

    6.1 同一个账号,一次性发出多个请求

    部分用户通过浏览器的插件或者其他工具,在秒杀开始的时间里,以自己的账号,一次发送上百甚至更多的请求。实际上,这样的用户破坏了秒杀和抢购的公平性。

    这种请求在某些没有做数据安全处理的系统里,也可能造成另外一种破坏,导致某些判断条件被绕过。例如一个简单的领取逻辑,先判断用户是否有参与记录,如果没有则领取成功,最后写入到参与记录中。这是个非常简单的逻辑,但是,在高并发的场景下,存在深深的漏洞。多个并发请求通过负载均衡服务器,分配到内网的多台Web服务器,它们首先向存储发送查询请求,然后,在某个请求成功写入参与记录的时间差内,其他的请求获查询到的结果都是“没有参与记录”。这里,就存在逻辑判断被绕过的风险。

    输入图片说明

    应对方案:

    在程序入口处,一个账号只允许接受1个请求,其他请求过滤。不仅解决了同一个账号,发送N个请求的问题,还保证了后续的逻辑流程的安全。实现方案,可以通过Redis这种内存缓存服务,写入一个标志位(只允许1个请求写成功,结合watch的乐观锁的特性),成功写入的则可以继续参加

    输入图片说明

    或者,自己实现一个服务,将同一个账号的请求放入一个队列中,处理完一个,再处理下一个。

    6.2 多个账号,一次性发送多个请求

    很多公司的账号注册功能,在发展早期几乎是没有限制的,很容易就可以注册很多个账号。因此,也导致了出现了一些特殊的工作室,通过编写自动注册脚本,积累了一大批“僵尸账号”,数量庞大,几万甚至几十万的账号不等,专门做各种刷的行为(这就是微博中的“僵尸粉“的来源)。举个例子,例如微博中有转发抽奖的活动,如果我们使用几万个“僵尸号”去混进去转发,这样就可以大大提升我们中奖的概率。

    这种账号,使用在秒杀和抢购里,也是同一个道理。例如,iPhone官网的抢购,火车票黄牛党。

    输入图片说明

    应对方案:

    这种场景,可以通过检测指定机器IP请求频率就可以解决,如果发现某个IP请求频率很高,可以给它弹出一个验证码或者直接禁止它的请求

    1. 弹出验证码,最核心的追求,就是分辨出真实用户。因此,大家可能经常发现,网站弹出的验证码,有些是“鬼神乱舞”的样子,有时让我们根本无法看清。他们这样做的原因,其实也是为了让验证码的图片不被轻易识别,因为强大的“自动脚本”可以通过图片识别里面的字符,然后让脚本自动填写验证码。实际上,有一些非常创新的验证码,效果会比较好,例如给你一个简单问题让你回答,或者让你完成某些简单操作(例如百度贴吧的验证码)。

    2. 直接禁止IP,实际上是有些粗暴的,因为有些真实用户的网络场景恰好是同一出口IP的,可能会有“误伤“。但是这一个做法简单高效,根据实际场景使用可以获得很好的效果。

    6.3 多个账号,不同IP发送不同请求

    所谓道高一尺,魔高一丈。有进攻,就会有防守,永不休止。这些“工作室”,发现你对单机IP请求频率有控制之后,他们也针对这种场景,想出了他们的“新进攻方案”,就是不断改变IP

    输入图片说明

    有同学会好奇,这些随机IP服务怎么来的。有一些是某些机构自己占据一批独立IP,然后做成一个随机代理IP的服务,有偿提供给这些“工作室”使用。还有一些更为黑暗一点的,就是通过木马黑掉普通用户的电脑,这个木马也不破坏用户电脑的正常运作,只做一件事情,就是转发IP包,普通用户的电脑被变成了IP代理出口。通过这种做法,黑客就拿到了大量的独立IP,然后搭建为随机IP服务,就是为了挣钱。

    应对方案:

    说实话,这种场景下的请求,和真实用户的行为,已经基本相同了,想做分辨很困难。再做进一步的限制很容易“误伤“真实用户,这个时候,通常只能通过设置业务门槛高来限制这种请求了,或者通过账号行为的”数据挖掘“来提前清理掉它们

    僵尸账号也还是有一些共同特征的,例如账号很可能属于同一个号码段甚至是连号的,活跃度不高,等级低,资料不全等等。根据这些特点,适当设置参与门槛,例如限制参与秒杀的账号等级。通过这些业务手段,也是可以过滤掉一些僵尸号

    7 高并发下的数据安全

    我们知道在多线程写入同一个文件的时候,会存现“线程安全”的问题(多个线程同时运行同一段代码,如果每次运行结果和单线程运行的结果是一样的,结果和预期相同,就是线程安全的)。如果是MySQL数据库,可以使用它自带的锁机制很好的解决问题,但是,在大规模并发的场景中,是不推荐使用MySQL的。秒杀和抢购的场景中,还有另外一个问题,就是“超发”,如果在这方面控制不慎,会产生发送过多的情况。我们也曾经听说过,某些电商搞抢购活动,买家成功拍下后,商家却不承认订单有效,拒绝发货。这里的问题,也许并不一定是商家奸诈,而是系统技术层面存在超发风险导致的。

    7.1 超发的原因

    假设某个抢购场景中,我们一共只有100个商品,在最后一刻,我们已经消耗了99个商品,仅剩最后一个。这个时候,系统发来多个并发请求,这批请求读取到的商品余量都是99个,然后都通过了这一个余量判断,最终导致超发。

    输入图片说明

    在上面的这个图中,就导致了并发用户B也“抢购成功”,多让一个人获得了商品。这种场景,在高并发的情况下非常容易出现。

    7.2 悲观锁思路

    解决线程安全的思路很多,可以从“悲观锁”的方向开始讨论。

    悲观锁,也就是在修改数据的时候,采用锁定状态,排斥外部请求的修改。遇到加锁的状态,就必须等待。

    输入图片说明

    虽然上述的方案的确解决了线程安全的问题,但是,别忘记,我们的场景是“高并发”。也就是说,会很多这样的修改请求,每个请求都需要等待“锁”,某些线程可能永远都没有机会抢到这个“锁”,这种请求就会死在那里。同时,这种请求会很多,瞬间增大系统的平均响应时间,结果是可用连接数被耗尽,系统陷入异常

    7.3 FIFO队列思路

    那好,那么我们稍微修改一下上面的场景,我们直接将请求放入队列中的,采用FIFO(First Input First Output,先进先出),这样的话,我们就不会导致某些请求永远获取不到锁。看到这里,是不是有点强行将多线程变成单线程的感觉哈。

    输入图片说明

    然后,我们现在解决了锁的问题,全部请求采用“先进先出”的队列方式来处理。那么新的问题来了,高并发的场景下,因为请求很多,很可能一瞬间将队列内存“撑爆”,然后系统又陷入到了异常状态。或者设计一个极大的内存队列,也是一种方案,但是,系统处理完一个队列内请求的速度根本无法和疯狂涌入队列中的数目相比。也就是说,队列内的请求会越积累越多,最终Web系统平均响应时候还是会大幅下降,系统还是陷入异常。

    7.4 乐观锁思路

    这个时候,我们就可以讨论一下“乐观锁”的思路了。乐观锁,是相对于“悲观锁”采用更为宽松的加锁机制,大都是采用带版本号(Version)更新。实现就是,这个数据所有请求都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,其他的返回抢购失败。这样的话,我们就不需要考虑队列的问题,不过,它会增大CPU的计算开销。但是,综合来说,这是一个比较好的解决方案。

    输入图片说明

    有很多软件和服务都“乐观锁”功能的支持,例如Redis中的watch就是其中之一。通过这个实现,我们保证了数据的安全。

    8 总结

    互联网正在高速发展,使用互联网服务的用户越多,高并发的场景也变得越来越多。电商秒杀和抢购,是两个比较典型的互联网高并发场景。虽然我们解决问题的具体技术方案可能千差万别,但是遇到的挑战却是相似的,因此解决问题的思路也异曲同工

     
    展开全文
  • 中国经济,尤其是传统的制造业,过度依赖于资源消耗大量廉价人力资本的投入,企业的自主创新能力较差,生产的核心零部件长期依赖于进口,随着中国人力成本的提升,能源产量日益匮乏,中国制造赖以生存的优势正在...

    很多学者看来,中国经济能取得如此快速的发展,“中国制造”的产品能够风靡全球,成为“世界工厂”,是一个不可思议的现象,而这种现象出现的背后却存在着巨大的隐患。中国经济,尤其是传统的制造业,过度依赖于资源消耗和大量廉价人力资本的投入,企业的自主创新能力较差,生产的核心零部件长期依赖于进口,随着中国人力成本的提升,能源产量日益匮乏,中国制造赖以生存的优势正在逐渐消失。


    其实并非只有中国,包括美国、德国在内的众多发达国家也遇到了同样的发展瓶颈,为打破这种经济局限,各国纷纷开展了以互联网工业为核心的新一轮科技革命,提出了本国在未来几十年的发展战略和计划。




    国内有的专家认为,如果工业4.0在全球范围内推广开来,中国还是保持原有的经济增长模式,那么中国制造业将面临着全线的崩溃,我们的价格优势会转化为我们的劣势,成为国际竞争中的不利因素,中国经济在快速发展之后,面临着新一轮的机遇和挑战。那么,中国在面临这一场席卷全球的工业革命时,到底应该如何应对?提升中国制造业的竞争实力,打造中国特色的智能化生产,成为新阶段的历史使命,C2M模式为这种创新性发展提出了新的应对策略。      

    C2M成为传统制造业的推动力

    C2M即顾客对工厂,C2M模式允许消费者参与到产品设计、生产过程中,当消费者无法找到满足自己需求的产品时,可以直接下单给企业进行私人定制。这种模式将消费者规模巨大且相互之间割裂、零散的消费需求整合在一起,以整体、规律、可操作的形式将需求提供给供应商,从而将“零售”转化为“集采”,为厂商带来大量商机,能够大幅提高工厂的生产效率和资产、资金周转能力,消除库存风险。



    在C2M模式下,传统企业即将进入智能化个性生产模式,客户可以根据自己的需求在工业互联网平台上发布自己的产品需求,也可以通过智能搜索,寻找到能够加工自己产品的企业。这种企业是以客户的需要为中心,进行产品的定制化生产,节省了产品的流通环节,也节约了企业的生产成本。




    流通环节逐渐消失




    新一代的年轻客户群体更加注重生活的品质和效率,因此产品流通环节会逐渐淡出历史舞台,整个产品的生态产业链会变的更短,原有的设备生产商、软件开发商都会发生重大变化,很多商家可以更加直接的向客户提出产品生产解决方案。




    中间环节的衰退,会导致一部分产业的消失,也会激起另一部分产业的兴起,存活下来的中间环节能够为庞大的数据提供增值服务,以更加快捷的方式,进行企业间的数据信息传递。从产品的设计开始到最后的产品销售,形成一个全新的产业链。




    随着移动互联网、物联网、工业大数据、智能制造的长足发展,制造业进入了工业4.0的时代,基于现代信息技术所变革出的以客户为中心的C2M(客户到工厂)商业模式,以其更好的满足新时代的“小批量、多批次”的制造需求,在现代的制造业企业中获得了越来越多的成功。



    来源:网络




    为什么说C2M模式帮助制造企业实现逆袭翻身,进入工业互联网时代?


                                                                           



    1

    制造业现状的深思

    随着我国制造业发展迅速,到2010年制造业产值在全球占比超过美国,成为制造业第一大国。但近年来有关中国制造业衰退甚至崩溃的论断不绝于耳。这种论断一般会采用两种论证方式:一是举几个制造企业倒闭的例子,进而断言某些地区乃至全国制造业都在衰退或者崩溃。显然,这种“只见树木不见森林”的论证存在明显的逻辑谬误。二是过分夸大中国制造业发展面临的问题和挑战,诸如劳动力低成本优势已经丧失、面临新工业革命的巨大挑战、缺乏核心技术创新能力等,进而认为中国制造业无法应对这些问题和挑战,终将走向衰退乃至崩溃。应该说,这些问题和挑战不同程度存在,但它们能否导致中国制造业走向衰落乃至崩溃呢?显然不能。对于传统制造业来说,反而是一次挑战,一次变革的机遇。


    以美国制造业为例,美国曾是世界最强大的制造业中心,从刮胡刀到钢铁,从化工到飞机,一度几乎所有机器加工制成品无不带有“Made in the USA”的标签,这一趋势持续了大半个世纪。随着亚洲“四小龙”以及中印制造业的崛起,美国开始在制造业领域逐渐淡出。但淡出并不等于没落,而是正悄悄地进行不断的转化和升级。目前,美国的中小制造业公司仅有11.5万家,其中超过80%的企业都应用了信息系统。制造业所获投资也在逐年上升,研发投资占了美国工业投资的2/3。美国企业都在致力于把最新技术融入设计和生产,实施“精益生产”的原则,提高机器人技术的使用和自动化水平,用精准的计划、标准的流程、快速的响应周期来实现“即时完美的交货”。这也就是为什么美国制造企业总量虽略减但依然是全球最大的制造国的最终原因。






    2

    制造业的出路在何方?

    随着互联网技术的不断发展,消费者网购的生活方式日渐盛行。据中国电子商务研究中心监测数据显示2016年中国电子商务交易额22.97万亿元,同比增长25.5%,未来增长趋势明显。同时,经济水平的不断发展,个人收入的增加,消费者越来越追求生活品质,更加倾向于个性化、差异化、高品质的产品。


    另一方面,制造企业信息化程度普遍偏低,大量的工作依靠“人”,但是伴随着中国工业化进程步入后期、人口红利逐步消失以及人口老龄化,劳动力低成本优势正在逐步消失。2010年,我国制造业人员平均工资为30916元,2015年上升到55324元。一些跨国咨询集团的研究报告认为,中国的劳动力成本虽然与发达国家比还相差很远,但已经明显超过了东盟等新兴经济体。另外,生产资金占用高,库存压力大,产能过剩等等问题,都影响了制造企业的发展。除此以外,经过中间经销商环节的层层“剥削”,制造企业所剩利润稀薄,有些甚至无法负荷而面临破产的局面。


    时代已经悄然改变,如今的形势是何如?以什么办法应对?值得所有制造企业深思。


    如今是消费需求的时代,随着消费产业升级传统的商业模式已经不适用未来的消费关系是:消费者需要什么,生产者就得生产什么,这是一个逆向生产的过程

     


    每个人的个性需求被放大,人们越来越喜欢个性化的东西。但是个性化的东西需求量没有那么大,这就需要工业企业能够实现小批量的快速生产。而以人工智能、大数据、物联网、云计算等为代表的技术革新,恰恰顺应了这种变化。它正在实现“消费者”和“制造业”以及“信息化”高度融合,诞生出C2M(顾客对工厂)模式:工厂可以快速、小批量、定制化的生产每一个消费者需要的东西!

     

    而C2M商业模式实现了顾客到工厂的直接链接,去掉了高耗的中间流通加价环节,使顾客能与制造商、设计师直接链接,为顾客提供优质平价性价比高,个性化且专属的产品。事实上,它是一种“聪明”模式:在C2M模式下,消费者直接通过平台下单,工厂接收消费者的个性化需求订单,然后根据需求设计、采购、生产、发货。


            得益于互联网技术的发展进步,用户碎片化、零散的个性化需求可以高效连接起来,这些信息整合后,还可以用可操作的形式提供给生产厂商,在保证生产规模的基础上满足消费者的个性化需求。这种去库存、去中间商、以量定产的新型商业模式,不仅使得各方价值最大化,更极大推进了制造业供给侧结构性改革,能提高传统生产要素的生产率,倒逼企业的生产线、供应链、内部管理制度乃至整个商业模式变革。同时通过收集、分析消费端的需求信息和购买行为,统计消费偏好,从而预测某款产品将成为市场“爆款”,有重点地物料备货和产能投放,实现产销有效对接。


    据了解,在著名制造之乡福州,很多企业都已经察觉到了这个态势。


    王宁是一家服装企业的负责人,几年前,她只是做普通的外贸单销售,现在,企业八成以上的营业额来自网络小批量定制化订单,并且这种方式的销售份额还在不断上升。


    “以前做外贸或者内贸服装加工,客户从下单到付款的周期非常长,有时候还拿不到钱,很多同行因此破产。此外,因为服装必须提前很长时间生产,有时候刚上市就不流行了,容易造成库存积压。通过网络,这两个问题都可迎刃而解。”王宁说,客户通过网络平台向她下单,先预付三成订金,根据客户的需求,工厂生产制造。


    未来,王宁也在尝试搭建C2M平台,利用大平台,客户直连工厂,快速提升产品的生产效率。同时,借助平台,在自家工厂产能剩余的情况下,释放出一部分产能,提供给周边订单多的制造企业,实现“共享工厂”,最大化经济、资源效率的最大化

    3

    C2M商业模式的需要把握哪些关键点?

    C2M模式的关键如何把消费者和制造端连接起来,也就是“2”的环节


    当一个需要给新房子采购家具的消费者,他在互联网电商平台前,如何才能买到性价比最高的商品呢?这里的性价比是指价格、质量、配送时间以及后续售后服务等的综合值。而一家家具制造企业甚至某个地域的家具制造行业,哪台机器是空闲的,哪个厂家是有剩余产能的,哪个工厂是有这个生产能力的,哪个配送位置是最适合消费者的,这一切都是靠“2”来进行智能撮合,帮助消费者和制造企业实现效益最大化


    例如以前的服装制造企业,产线加班加点在生产半年前的畅销款,殊不知当生产完成后,时尚的风向标已经变了,这批产品不流行,就堆积成了库存。现在,C2M模式可由此帮助企业凭借更加精准有效的合作和制造。其最大的优点在于,利用大数据分析,将用户的需求及时而准确地向生产商表达出来,用户的一切互联网“足迹”都被记录下来,通过信息的传输、储存和处理,企业对用户需求的了解更加精准。同时,制造企业透过C2M平台搭建好的SAAS应用,进行了信息化管理的提升,打造透明工厂,实现供给侧改革。


    另外,C2M模式减少了经销商的层层的隔离,使得价格更透明,沟通更直接,交付更快速。传统经销商对制造企业谈判的主题便是“压价”,可能成本价10元的商品,进过多层经销商,到达消费者手里是50元,而大部分利润都进入了经销商口袋,很多制造企业那依靠微薄的利润难以维持生计,不得不面临破产的局面。要想改变这种生存现状,就必须除去冗长的中间环节,让消费者直连制造企业,实现按需定制,这种C2M模式将成为未来趋势。


    简而言之,C2M模式中的“2”环节,利用智能引擎、大数据分析、供应链协同等,让消费者和制造企业的连接更加紧密,顺畅,多元化。


    目前,在各行业,尤其是汽车领域,C2M模式已经被证明是可行的,并且代表未来发展趋势。上海某著名车企,首款全尺寸智能定制互联网SUV于8月上旬,以创新定价方式完成了上市,现场实时订单则达到1385辆,初战告捷。显然,这台打通汽车定义、开发、验证、选配、定价和改进全流程的客户到工厂定制需求车型”,向消费者宣告私人订制时代到来的同时,也为百年汽车产业指明了产生升级的方向。


    4

    C2M模式,机遇与挑战并存

    对于制造业来说,


    这是一个最好的时代,也是一个最坏的时代。


    有人悲观,有人奋起。


    悲观的人认为中国开始做什么都不赚钱,因为所有商业逻辑都被推倒。


    奋起的人看到了商业重组的希望,认为中国所有的生意都值得从头再做一遍!


    所谓“无破则不立”,“危机”二字的真正含义是“危险+机会”。


    商业是这样,社会也是这样。


    不要再为你的过去的成功而骄傲了,也不要为你过去的失败而气馁,未来属于每一个勤劳、智慧、携带正能量,而又大胆迎接变革的人!




    C2M:汽车变革的下一个路口



    C2M,用户驱动的造车模式,标志着全球汽车工业来到人类制造业第五阶段——个性化量产

    几年前,英国《金融时报》记者彼得·马什(Peter Marsh)在其著作《新工业革命》一书中,把人类制造业发展分成五个阶段:


    第一阶段是少量定制,第二阶段是少量标准化,第三阶段是大批量标准化生产,第四阶段是大批量定制化,第五阶段是个性化量产。


    到了信息时代,随着互联网、大数据、云计算等技术逐渐渗透到工业及商业领域,目前个性化量产已经有了可能性,甚至在某些行业已经小范围实现。



     如何理解C2M


    对消费者而言,工厂提供的是标准化产品,个性化需求很难得到满足,基本还停留在大批量标准化生产阶段。

    而C2M模式体现出的特征可以用这三个关键词来表示:智能化,大规模,个性化定制


    工信部信息化与软件服务司副司长安筱鹏曾提出了理解C2M定制化生产模式的五个视角:


    一、从工业4.0视角看,C2M定制化生产模式是工业4.0、智能制造的逻辑起点。

    美国国家标准与技术研究院(NIST)认为智能制造要解决的问题就是:差异性更大的定制化服务,更小的生产批量,不可预知的供应链变更和中断。


    二、从技术路径视角看,C2M实现了数据流动的自动化。

    大规模定制、个性化定制生产模式非常复杂,制造过程每一个环节的不确定性大幅提高,只有通过数据的自由流动才能有效解决定制化生产的成本、质量、效率等一系列问题。


    三、从组织变革视角看,C2M需要企业从组织转变为自组织。

    定制化生产模式的关键在于如何快速响应每一个客户的需求,需要组织上的变革,“企业能力平台+自组织”正在成为互联网时代一种全新的组织景观,根据需要企业内部可以自动组建新的团队、自动配置各类资源、自动优化调整运行机制。


    四、从市场竞争视角看,C2M是互联网时代企业的新型能力。

    个性化定制正成为互联网时代企业的一种新型能力,一种对客户需求深度挖掘、实时感知、快速响应、及时满足的能力,这种能力是企业竞争优势的重要组成。


    五、从经济理论视角看,C2M是基于数据资产通用性的范围经济。

    传统制造模式到C2M转型过程,是信息技术给设备、产品、人、流程“赋能”的过程,是资产的通用性对资产专用性替代的过程。而数据资产是企业资产中通用性最强的。


    相比以往的大规模生产模式,C2M模式面临成本、质量、效率的挑战。真正做到C2M,就要能很好地维持成本、质量和效率三者之间的相对平衡。


    理想的情况就是,企业按需生产,在各个环节提升效率,控制住成本,从而能以合适的价格给消费者提供品质好的产品,满足他们的个性化选择。


    值得注意的是,C2M并不排斥共性需求,仍然会有相当一部分产品是以标准化的形态流向市场的,只不过这种需求是以类似团购的方式满足。



    C2M逐渐成为关注热点


    单从制造业角度看,C2M是一种新的生产模式,而从互联网企业角度,它被视为一种新的商业模式,甚至往宏观里说,它也可以说是一种经济范式。



    行业先行者


    在与人们的日常生活关系更为密切的领域,C2M模式已经部分地落地了。

    比如眼镜生产商依视路,家具企业尚品宅配,服装业的红领、爱斯达等,这些企业的智能化个性定制实践较早,已经有成型的模式。


    而在汽车领域,刚性生产线正在向柔性化生产线过渡,C2M模式尚在初始探索阶段。不过,已经有一些敏锐的企业开始着手实践。


    2016年7月,上汽大通公布了企业C2B(C2M)造车战略,然后开始紧锣密鼓地推进相关工作。紧接着,9月成都车展期间,宝沃发布“九屏一云”服务平台,作为公司B2C2B生态构架的重要一环。等等一系列的动作,我们都可以看出,C2M模式将成为汽车变革的下一个路口。



    在C端,车企要与海量用户线上沟通,听取他们的建议,打造个性化车辆,从之前的车企为中心转型为用户为中心;在M端形成智能工厂、分布式制造、智能排产等技术,通过经销商/互联网电商平台等,直接面对用户,给他们提供满意的方案。


    一旦C2M模式在一个行业发展甚至成熟起来,市场竞争的逻辑就变了。因此,一个行业先行者的出现,几乎就宣告了这个行业的竞争方式甚至格局即将发生变化。


    C2M模式要走向成熟不仅需要信息技术的发展融合,同样还需要互联网平台、AR、3D打印等技术的进步



    英国《金融时报》记者彼得·马什预测,到2040年左右,利用3D打印技术为很多产品(从喷气式发动机到汽车)生产零件将成为主流,定制特定的相关产品以满足个人需求或生理需求将变得非常重要。那时,大批量个性化时代就真正来临了。


    眼下,汽车工业来到第五阶段个性化量产的门前。这种用户驱动的C2M造车模式,是汽车变革的再升级,它给汽车行业指出了变革的下一个路口。


     



    人工智能赛博物理操作系统

    AI-CPS OS

    人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。


    AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。


    领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:

    1. 重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?

    2. 重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?

    3. 重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?

    AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:

    1. 精细种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。

    2. 智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。

    3. 高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。

    4. 不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。

    5. 边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。

    AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:

    1. 创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;

    2. 对现有劳动力和实物资产进行有利的补充和提升,提高资本效率

    3. 人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间


    给决策制定者和商业领袖的建议:

    1. 超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;

    2. 迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新

      评估未来的知识和技能类型;

    3. 制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开

      发过程中确定更加明晰的标准和最佳实践;

    4. 重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临

      较高失业风险的人群;

    5. 开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。


    子曰:“君子和而不同,小人同而不和。”  《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。


    如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!


    新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。





    产业智能官  AI-CPS



    用“人工智能赛博物理操作系统新一代技术+商业操作系统“AI-CPS OS:云计算+大数据+物联网+区块链+人工智能)在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链






    长按上方二维码关注微信公众号: AI-CPS,更多信息回复:


    新技术“云计算”、“大数据”、“物联网”、“区块链”、“人工智能新产业:智能制造”、“智能农业”、“智能金融”、“智能零售”、“智能城市、“智能驾驶”新模式:“财富空间、“数据科学家”、“赛博物理”、“供应链金融”


    官方网站:AI-CPS.NET




    本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!



    版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com





    展开全文
  • 我想大概有两个原因: ...那么第二个人就很可能直接参考第一个人堆的结构或方法来堆。而不是自己看说明书,懂原理,然后慢慢堆。 对于程序员:如让一个人写一个IIC通信程序,大概率他会先在网上找各种例程,...

    我想大概有两个原因:

    1. 高效。

    别人都做好的东西,我为什么还要花时间去研究?直接拿来用多好。站在巨人的肩膀上,走的更快。

    2. 懒于思考。

    如:3个人堆积木,其中一个人提前了10分钟就开始堆了,所以进度比较快一点。那么第二个人就很可能直接参考第一个人堆的结构或方法来堆。而不是自己看说明书,懂原理,然后慢慢堆。

    对于程序员:如让一个人写一个IIC通信程序,大概率他会先在网上找各种例程,然后尝试看某个例程是否可用等,某一个通了,就算写完了,但是自己可能都不是很理解通信协议,具体通信过程等。so,懒于思考。

    3. 容易受惰性思维干扰。

    这个怎么说呢,简单的说就是:理性的思考,容易受到其他思维的干扰。如,

    a. 让你思考写一个例程,你会想很难写,还需要理解协议,很麻烦哎,不想写,哎,玩一把游戏很轻松哎,到时候找一份例程就好了,很快哎,就容易受到游戏的思维干扰,随即玩游戏,或者手机,或者睡觉等。最终一拖再拖,难以完成。

    b. 让你找一个例程,你会想网上那么多,找几个改改就好了,找一个相当于就有一些进度了,我能看到进度。所以更乐于找。

    换一个例子:给你个斧子,让你去劈柴,你看到前面有人拿着斧子在劈柴,你就会跟他学,然后劈柴,我能看到我劈到了一些柴,离目标更近了。但是换一种思路,你为什么没想更高效的劈柴方法?或者前面那个人劈柴方法是否合理等。完全就是照抄。大概率就是因为,你觉得想一种更高效的方法,难,不知道什么时候能想出来,所以,不想想。还不如直接干来的实在。

     

    这样做的缺点:

    1. 自己不懂原理。只是简单的复制,最多加个合成。换句话说:工厂模式。

    2. 难于创新,难于提高效率。因为,你用的别人的东西,你怎么做的比别人更好。

    3. 容易浪费时间去玩游戏,睡觉等。更容易做,不用思考,不用考虑结果的事情更容易干扰你。

     

    解决办法:

    1. 善于思考,善于动脑。

    2. 正确的思维观念:要么不做,要么做深,做精。

    3. 不急于求成,眼光要放的长远。

    4. 可以参考别人的东西或代码,但是,一定要看懂每一行,每一句细节实现逻辑等。要使其成为自己的思维逻辑,并考虑如何优化,有没有什么缺点不足等。努力把其做至最好。

    5. 懂原理的思维观念,才能使得你有能力优化代码。提高代码效率。即创新。

     

    展开全文
  • 《麦肯锡卓越工作方法

    万次阅读 2007-10-15 09:29:00
    《麦肯锡卓越工作方法》****************序言*************** 就像是世界上出现锁以后就必然有与之相应的钥匙一样,问题与方法也是共存的。而如何找到最合适、最高效的工作方法,是每一个管理者需要认真对待的问题...
  • 按照TRIZ理论对创新的分级﹐“使用隔热层减少热量损失"属于( )。 A、 一(简单的解) B、 二(少量的改进) C、 三(根本性的改进) D、 四(全新的概念) 我的答案:A 2 ...
  • 文章发后,接受不少朋友的建议意见,做了修改,现整理发给大家新版: 一、 运维工作目标 运维工作的目标是以行业用户满意度为导向,展开运维服务工作。企业需要发展,发展离不开我们的用户,用户满意度为导向...
  • 2021美赛(4)美赛E题数据、思路方法

    千次阅读 2021-02-06 10:29:57
    行动轨道4: 促进公平生计 行动轨道4将致力于促进粮食价值链上所有行为者的充分生产性就业体面工作,降低世界上最贫穷者的风险,促进创业,并解决获取资源的权利价值分配不公平的问题,从而为消除贫困作出贡献...
  • 1. 重承诺、讲计划 (1)重承诺:对于用户的任何承诺,包括:服务的目标与级别要求、提供的资源或方案、应给予...(2)讲计划:工作计划是整个运维工作的龙头,工作计划依据公司要求及对用户的承诺而制定,各项运维
  • 使得维护部门迫切需要通过技术创新、维护模式创新,减少人工操作工作量,提升维护效率。 在维护部门的日常工作中,周期性查看各 IT 系统的服务器操作系统日志、应用系统数据库运行日志是保证及早发现问题、及时...
  • 《世界500强公司要求员工必须熟练掌握的七种工作方法,收好不谢!》 精选一 工作讲究方法,找到了好方法可以让你的工作事半功倍,而没有头绪、没有计划、没有目标的工作形式则会让你身心俱疲还毫无成效。一流公司...
  • 近几年,随着党国家"大众创业万众创新...文章主要从更新实验教学理念、改革实验教学方法创新实验教学内容、全面开放实验资源、实验室信息化建设等几个方面构建了基于创新型人才培养的实验教学与实验室管理新思路
  • 人事面试问题回答思路

    千次阅读 2019-12-05 09:57:14
    本文对面试中经常出现的一些典型问题进行了整理,并给出相应的回答思路和参考答案。读者无需过分关注分析的细节,关键是要从这些分析中“悟”出面试的规律及回答问题的思维方式,达到“活学活用”。 问题一:“请你...
  • 五、创新知识-用创新超越竞争

    千次阅读 2012-02-14 15:43:17
    创新活动的核心是“新”,它或者是产品的结构、性能外部特征的变革,或者是造型设计、内容的表现形式手段的创造,或者是内容的丰富完善。创新的范围很广,包括知识创新、技术创新、制度创新、流程创新、产品...
  • 数据结构与算法设计思路和考察点

    万次阅读 2009-08-14 22:42:00
    数据结构常见的问题包括字符串方面、链表的各种操作、树的各种操作,以及各种变形与其它数据结构的结合使用。 面试题目 字符串专题 1.将字符串转换成整数,将整数转换为字符串,浮点数与字符串的...
  • 思路转换的失败

    万次阅读 2016-01-13 09:56:24
    在一年半的开发过程中,尝试了各种不同的方法和思路来进行程序创意规划试错。至今,依然失败的教训居多,侥幸成功的很少。因此,我将在本文中分享所经历的创意过滤经验以及失败教训。   思路转换的...
  • 检核表法(创新思维3)

    千次阅读 2015-04-21 21:09:21
    这种创新技法是根据要解决的问题,或需要发明创造,技术创新的对象,找出有关因素,列出一张思考表,然后逐个去思考,研究挖掘,由此激发联想,使得发明创新过程更为系统。其本质是一种变维思维的方法。广义上的...
  • 软件开发创新

    千次阅读 2014-03-31 11:43:32
    创新,作为当前各行各业一个非常时髦的话题。针对软件行业来讲,体现的尤为淋漓尽致。可以不夸张的说,推动软件行业...从领域上包括理论与方法创新、管理与制度创新、过程控制创新、技术与工具创新、文化创新、科
  • 数据分析思路

    万次阅读 多人点赞 2018-09-14 16:08:06
    而大部分我们所购买的书基本都是某一类工具如何使用去进行数据分析,但是看完过后还是不太懂什么是数据分析,应用到实际工作场景中照样很迷茫不知道该如何下手,这是什么原因呢?有的小伙伴会说:我想分析的根本没有...
  • 全国大学生创新创业实践联盟-创新创业-按序学习: all: 商业模式设计过程: 顶层设计,具体化设计,组织化设计。 商业模式评价准则: 1,客户价值实现的程度: 该模式能够在多大程度上实现创业团队原本拟定为...
  • 它要求本科生个人或团队,在导师指导下, 自主完成创新性研究项目设计、研究条件准备项目实施、研究报告撰写、成果(学术)交流等工作。 项目遵循“兴趣驱动、注重过程、鼓励创新”的实施原则,重点资助思路...
  •  近年来,大数据已成为科技界企业界关注的热点,越来越多的企业研究者正在关注大数据的应用。大数据的分析与挖掘技术在科学界正在如火如荼的展开,各种大数据的新算法被开发研究出来,例如近年来发展比较完善的...
  • 5.创新关键问题 6.学位论文研究的工作条件 7.学位论文研究的进度计划安排 8.参考文献 可行性分析在申请书开题报告中都会用到 研究方法、技术路线、实验手段、关键技术 1、研究方法。说...
  • 九月腾讯,创新工场,淘宝等公司最新面试三十题(第171-200题)引言 曾记否,去年的10月份也同此刻一样,是找工作的高峰期,本博客便是最初由整理微软等公司面试题而发展而来的。如今,又即将迈入求职高峰期--10...
  • 针对高职院校相关专业的PLC...流程、梯形图实现以及整体程序综合调试等方面详尽介绍了该创新实验平台的设计思路和实现方法。 学生通过基于该平台的模拟调试,达到了培养学生创新能力和形成整体方案设计思路的目的。
  • 一些关于并行计算的科研思路

    千次阅读 2015-12-23 19:33:26
     图形图像处理在国内国际有一个万金油灌水领域,其实也可以说是一个偷懒的领域,就是将传统算法并行化处理,下面说说我的思路。如何找到并识别并行的机会呢。最好的方法是用代码性能分析工具分析代码,对 cpu 占用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,271
精华内容 16,508
关键字:

创新工作的方法和思路