• 生产运营战略_2020年注会《战略》答疑

    希望是坚韧的拐杖,忍耐是旅行袋,携带它们,人可以登上永恒之旅。小奥为各位考生整理了注册会计师战略的答疑,小伙伴快进来看看吧!元旦、春节之前,许多企业提前加班加点生产,确保“两节”的市场供应充足。从平衡产能与需求的角度来看,该做法属于()。A.领先策略B.资源订单式生产C.库存生产生产D.订单生产生产正确答案:C【提问】为什么不选A领先策略?【答疑】尊敬的学员,您好:首先二者的所属范围不同。领先策略是产能计划的一种类型,而库存生产生产是平衡产能与需求的一种方法。其次,领先策略是根据对需求增长的预期增加产能,是一种进攻性策略;而库存生产生产是先购买原材料,然后进行生产,然后接订单。最后,二者从本质上不属于同一知识点,因此我们在做题的时候抓住题干给定的范围即可。如本题“从平衡产能与需求的角度来看”,可以将选项A排除。每个努力学习的小天使都会有收获的,加油!使人生愉快的必要条件是智慧,而智慧可经由自己的努力而获得。小奥这里会继续帮助大家,为大家更新注册会计师考试答疑的!注:答疑内容出自东奥《战略》教研团队(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-05 制造业库存商品会计分录 总账科目库存商品生产成本库存商品

  • 生产与存货循环存在的重大错报风险_2020年注会《审计》答疑

    只要理想和生活有联系,那它就绝对没有什么不好的地方。小奥为各位考生整理了注册会计师审计的答疑,小伙伴快进来看看吧!被审计单位盘点存货过程中,所有盘点过的存货贴盘点标签,注明存货品名、数量和盘点人员,完成盘点前检查现场确认所有存货均已贴上盘点标签,以应对存货项目的()认定。A.存在B.准确性、计价和分摊C.权利和义务D.完整性正确答案:A,D【提问】老师,盘点不是可以为权利和义务提供部分证明吗,为什么这里不选权利和义务呢,谢谢!【答疑】勤奋可爱的学员,你好:我们是要根据题干具体分析的。检查相关的交易合同,原始凭证才能为权利和义务提供部分的证据。现在仅仅是检查盘点标签,注明存货品名、数量和盘点人员是不能证明权利和义务的。就比如仓库里有一批货物,我检查现场确认是100箱苹果,但不能证明他的权利和义务。每个努力学习的小天使都会有收获的,加油!思路清晰远比卖力苦干重要,心态正确远比现实表现重要,选对方向远比努力做事重要,做对的事情远比把事情做对重要。小奥这里会继续帮助大家,为大家更新注册会计师考试答疑的!注:答疑内容出自东奥《审计》教研团队(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-03 审计存货盘点流程及注意事项 审计存货抽盘比例是多少

  • 生产与存货循环存在重大错报风险_2020年注会《审计》答疑

    正确的学习态度与坚强,自信,智慧一样,是一个人心中贮存的一种品质。小奥为各位考生整理了注册会计师审计的答疑,小伙伴快进来看看吧!被审计单位盘点存货过程中,所有盘点过的存货贴盘点标签,注明存货品名、数量和盘点人员,完成盘点前检查现场确认所有存货均已贴上盘点标签,以应对存货项目的()认定。A.存在B.准确性、计价和分摊C.权利和义务D.完整性正确答案:A,D【提问】老师,盘点不是可以为权利和义务提供部分证明吗,为什么这里不选权利和义务呢,谢谢!【答疑】勤奋可爱的学员,你好:我们是要根据题干具体分析的。检查相关的交易合同,原始凭证才能为权利和义务提供部分的证据。现在仅仅是检查盘点标签,注明存货品名、数量和盘点人员是不能证明权利和义务的。就比如仓库里有一批货物,我检查现场确认是100箱苹果,但不能证明他的权利和义务。每个努力学习的小天使都会有收获的,加油!我们的理想要靠我们自己去努力去实现。哪怕外界干扰刺激我们也不能放弃理想。小奥这里会继续帮助大家,为大家更新注册会计师考试答疑的!注:答疑内容出自东奥《审计》教研团队(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-03 审计存货盘点流程及注意事项 审计存货抽盘比例是多少

  • 生产运营战略_2022年注会《战略》预习知识点

    2022年注会新考季已经到来,打算备考注会战略科目的小伙伴们,小编为大家准备了2022年注会《战略》预习知识点,帮助大家提前熟悉重要考点,快来学习吧!推荐阅读:2022年注册会计师《战略》预习知识点汇总【内容导航】生产运营战略【所属章节】第三章战略选择【知识点】生产运营战略生产运营战略1.生产运营战略所涉及的主要因素从生产运营战略的横向考察,所有生产运营流程都涉及转化过程,但是转化过程在四个方面或因素上有所不同,它们分别是批量、种类、需求变动以及可见性。因素含义案例与单位成本的关系批量不同的生产运营流程在投入和产出的批量上有所不同比如箱包产品,普通的产品可以大批量的生产,纯手工制作的产品就会批量小批量大,单位成本低;批量小,单位成本高种类企业向顾客提供的产品或服务的范围(如标准化产品、个性化产品)如福特汽车公司的T型车,标准化生产,实现规模经济,降低成本;如某服装品牌,一年要生产四万款产品,个性化强,防止“撞衫”少品种—低成本;多品种—高成本需求变动需求变动较大时,运营会产生产能利用率的问题。所以,运营流程应尽量预测需求变动并相应调整产量,避免发生损失(运营系统的柔性化)例如,一般企业一年中需求比较稳定,成本容易控制;但是有一些企业季节性明显,比如种子化肥企业,冬季、春季需求量大,夏季、秋季需求量小;当需求量小时,企业的设备和员工都处于未被充分利用的状态,单位成本可能较高,所以企业应尽量预测需求变动,避免损失需求稳定—产能利用率较高—低成本;需求波动—产能利用率较低—高成本可见性可见性是指生产运营流程为客户所见的程度。可见性决定了企业需要何种类型的服务流程来提供服务如同样是饺子馆,喜家德的厨房是透明的,制作流程顾客可见,普通饺子馆制作流程不可见可见性较低(生产型行业)—员工沟通技巧要求低—低成本;可见性较高(服务型行业)—员工沟通技巧要求高—高成本2.产能计划产能是指在一定时期内,在既定的组织技术条件下,企业所能生产的产品的最大数量,即最大生产能力。产能计划是指确定企业所需的最大生产能力以满足其产品不断变化的需求过程。当产品需求旺盛时,企业需要考虑如何增加生产能力,以满足需求的增长;当产品需求不足时,企业需要考虑如何缩小规模,避免生产能力过剩,尽可能减少损失。产能计划的类型包括领先策略、滞后策略和匹配策略。类型含义属性阐释领先策略是指根据对需求增长的预期增加产能,即产能的增加领先于外部市场需求的增加进攻策略其目标是将客户从企业竞争对手的手中吸引过来。这种策略的潜在劣势在于其通常会产生过量的产能,生产能力不能被充分利用而导致企业成本上升滞后策略是指仅当企业因需求增长而满负荷生产或超额生产后才增加产能,即产能的增加滞后于外部市场需求的增加保守策略能降低生产能力过剩的风险,也可能导致潜在客户流失匹配策略是指产能的增加与外部市场需求的增加在规模上、时间上是匹配的稳健策略在把握市场机会和充分利用企业的生产能力两方面得到很好地兼顾一般来说,共有三种平衡产能与需求的方法:资源订单式生产、订单生产生产和库存生产生产。平衡产能与需求的方法含义解释资源订单式生产由于每个客户的需求各不相同,客户的需求不能准确地提前预测,只能在取得客户订单后,取得完成订单所需的资源,最后组织生产订单→资源→生产例子:建筑企业承接新订单后,才开始采购资源订单生产生产即按订单装配式生产,客户对产品或服务的需求基本是相同的,只是配置要求不同。因此企业可以提前保持基本的资源,在取得客户订单后,按订单组织生产资源→订单→生产例子:餐馆需要全职员工和兼职员工,但只有在举办大型宴会需要更多人力时,才使用兼职员工库存生产生产所有客户对最终产品的规格或型号的需求是确定的、相同的,而且企业对产品的市场前景也看好,因此客户的需求能够准确地提前预测,对此企业可以提前取得资源,然后组织生产,最后推销给客户资源→生产→订单例子:社会经济增长理想,预期圣诞节玩具订单会增加,于是在第三季度就开始生产☆易错易混点三种产能计划与三种平衡产能与需求方法的区别产能计划,准确来讲应该是产能策略。策略,是指计策、谋略。产能策略是指为了实现产能与外部市场需求的对接,根据形势的发展需要而制定的行动准则。方法是指为了完成一定的目的和任务所采用的方式、手段。方法是更为详细具体的方式、手段和途径,它是策略的具体化,方法要受制于策略。在平衡产能与需求的过程中选择和采用什么方法,受到策略支配。因此,三种平衡产能与需求的方法可以理解为实现三种产能策略的方式、手段和途径。简单的说,策略与方法的关系:策略就是运用很多方法来达到成功。3.准时生产系统(JIT)含义优点缺点适用范围JIT(Jutitime)生产方式的基本思想是“只在需要的时候,按需要的量,生产需要的产品”,也就是追求一种无库存,或库存达到最小的生产系统,JIT以订单驱动,采用拉动方式把供、产、销紧密地衔接起来,使物资储备、成品库存和在制品大为减少,提高了生产效率(1)库存量低(2)因为仅在需要时才取得存货,所以降低了花费在存货上的运营成本(3)降低了存货变质、陈旧或过时的可能性(4)避免因需求突然变动而导致大量产成品无法出售的情况出现(5)因为JIT着重于第一次就执行正确的工作这一理念,所以降低了检查和返工产品的时间(1)仅为不合格产品的返工预留了最少量的库存,因此一旦生产环节出错则弥补空间较小(2)生产对供应商的依赖性较强,并且如果供应商没有按时配货,则整个生产计划都会被延误(3)企业按照实际订单生产所有产品,因此并无备用的产成品来满足预期之外的订单适用于服务型企业和制造型企业(由于2022年新课暂未开通,预习知识点以2021年授课讲义为主)注:以上注会预习知识点选自田明老师2021年注会公司战略与风险管理授课讲义●●●●●2022年注会考试预习阶段备考资料推荐报考攻略考生必读!2022年注会考试报考全攻略!含金量注册会计师就业前景、薪资水平、福利待遇大揭秘!全年学习计划2022年注册会计师全年备考计划,助力考生高效学习!预习阶段学习计划2022年注会预习阶段周计划,内附备考常见问题备考攻略备考2022年注会考试,不同类型考生要有不同策略!2022年注册会计师考试备考已经开始,小编都建议大家趁着报名开始前这段时间进行预习,这样才能为后续备考打好基础,提高备考效率。(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-03 中考化学必考知识点2022年 中考历史必考知识点2022年

  • 2022年注会税法重要知识点:税法要素

    注会税法知识点细碎,但“重点恒重”,只要大家能够分清各大税种以及对应的要素,就能顺利通过注会税法的考试。以下是2022年注会税法重要知识点——税法要素,快来学习吧!推荐阅读:2022年注册会计师《税法》重要知识点全梳理【内容导航】2022年注会税法重要知识点:税法要素【所属章节】第一章税法总论——第三节税法要素【知识点】税法要素税法要素本教材收录了税法的11个要素。分别是:总则、纳税义务人、征税对象(课税对象)、税目、税率、纳税环节、纳税期限、纳税地点、减税免税、罚则、附则。考点1:纳税义务人(★)又称“纳税主体”,是税法规定的直接负有纳税义务的单位和个人。简称“纳税人”。纳税人有两种基本形式:自然人和法人。根据《中华人民共和国民法典》第五十七条规定,法人是具有民事权利能力和民事行为能力,依法独立享有民事权利和承担民事义务的组织。我国的法人分为营利法人、非营利法人和特别法人。与纳税人紧密联系的两个概念:考点2:征税对象(★★★)征税对象又叫课税对象、征税客体,指税法规定对什么征税,是征纳税双方权利义务共同指向的客体或标的物,是区别一种税与另一种税的重要标志。考点3:税目(★★)税目是在税法中对征税对象分类规定的具体征税项目。反映征税的具体范围,是对课税对象质的界定。税目体现征税的广度。考点4:税率(★★★)指对征税对象的征收比例或征收额度。税率是计算税额的尺度,也是衡量税负轻重与否的重要标志,税率体现征税的深度。税率类别具体形式应用的税种比例税率单一比例税率差别比例税率幅度比例税率增值税、城市维护建设税、企业所得税等定额税率按征税对象确定的计算单位直接规定固定的税额城镇土地使用税、车船税等累进税率的分类和运用比较特殊累进税率类别具体应用额累全额累进税率我国目前没有采用超额累进税率把征税对象按数额大小分成若干等级,每一等级规定一个税率,税率依次提高,将纳税人的征税对象依所属等级同时适用几个税率分别计算,再将计算结果相加后得出应纳税款个人所得税中的综合所得和经营所得率累全率累进税率我国目前没有采用超率累进税率以征税对象数额的相对率划分若干级距,分别规定相应的差别税率,相对率每超过一个级距的,对超过的部分就按高一级的税率计算征税土地增值税考点5:纳税环节(★)指征税对象在从生产到消费的流转过程中应当缴纳税款的环节。要掌握生产、批发、零售、进出口等各个环节上的税种分布,有些税种单一环节课税,有些税种多环节课税。考点6:纳税期限(★★)指纳税人按照税法规定缴纳税款的期限。有三个概念:纳税义务发生时间、纳税期限、缴库期限,应掌握各个税种纳税期限,结算缴款期限与滞纳金计算的关系。考点7:纳税地点(★)根据各个税种纳税对象的纳税环节和有利于对税款的税源控制而规定的纳税人(包括代征、代扣、代缴义务人)的具体纳税地点。各税种纳税地点的规定都易出客观题。考点8:减税免税(★)指对某些纳税人和征税对象采取减少征税或免予征税的特殊规定。各章节的减税免税规定往往存在大量考点。注:本文知识点整理自东奥刘颖老师-2022年注会税法基础精讲班课程讲义●●●●●2022年注会考试基础阶段备考资料推荐全年学习计划2022年注会全年学习计划!基础阶段备考正在进行中教材变化解读刘颖老师:2022年注会税法教材变化解读及备考建议名师课程免费听2022年注会新课开讲!32位名师课程免费听,赶快收藏!轻松过关®试读2022年注会《轻松过关®》系列图书试读来袭!以上就是2022年注会税法重要知识点——税法要素相关内容,大家学会了吗?2022年注会考试时间是8月26-28日,赶快把备考提到日程上来吧!(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-05 注册会计师税法真题 cpa税法哪个老师好

  • 2022年注会会计重要知识点:会计要素定义及其确认条件

    注册会计师备考的号角已经吹响,为了帮助考生朋友们明确备考重点,小编整理了注册会计师考试会计科目的重要知识点,请各位考生跟紧小编的节奏,一起备考吧!【内容导航】会计要素定义及其确认条件【所属章节】第一章总论【知识点】会计要素定义及其确认条件会计要素定义及其确认条件(一)资产的定义及其确认条件1.资产的定义资产,是指企业过去的交易或者事项形成的、由企业拥有或者控制的、预期会给企业带来经济利益的资源。2.资产的确认条件将一项资源确认为资产,需要符合资产的定义,并同时满足以下两个条件:(1)与该资源有关的经济利益很可能流入企业;(2)该资源的成本或者价值能够可靠地计量。(二)负债的定义及其确认条件1.负债的定义负债,是指企业过去的交易或者事项形成的、预期会导致经济利益流出企业的现时义务。2.负债的确认条件将一项义务确认为负债,需要符合负债的定义,并同时满足以下两个条件:(1)与该义务有关的经济利益很可能流出企业(2)未来流出的经济利益能够可靠地计量潜在义务不能确认为负债(三)所有者权益的定义及其确认条件1.所有者权益的定义所有者权益,是指企业资产扣除负债后,由所有者享有的剩余权益。公司的所有者权益又称为股东权益。所有者权益是所有者对企业资产的剩余索取权。2.所有者权益的来源构成所有者权益按其来源主要包括所有者投入的资本、直接计入所有者权益的利得和损失(其他综合收益)、留存收益等。所有者投入的资本,是指所有者投入企业的资本部分,它既包括构成企业注册资本或者股本部分的金额,也包括投入资本超过注册资本或者股本部分的金额,即资本溢价或者股本溢价。直接计入所有者权益的利得和损失,是指不应计入当期损益、会导致所有者权益发生增减变动的、与所有者投入资本或者向所有者分配利润无关的利得或者损失。其中,利得是指由企业非日常活动所形成的、会导致所有者权益增加的、与所有者投入资本无关的经济利益的流入。损失是指由企业非日常活动所发生的、会导致所有者权益减少的、与向所有者分配利润无关的经济利益的流出。留存收益是企业历年实现的净利润留存于企业的部分,主要包括计提的盈余公积和未分配利润。3.所有者权益的确认条件由于所有者权益体现的是所有者在企业中的剩余权益,因此,所有者权益的确认主要依赖于其他会计要素,尤其是资产和负债的确认;所有者权益金额的确定也主要取决于资产和负债的计量。(四)收入的定义及其确认条件1.收入,是指企业在日常活动中形成的、会导致所有者权益增加的、与所有者投入资本无关的经济利益的总流入。2.收入的确认条件企业应当在履行了合同中的履约义务,即在客户取得相关商品控制权时确认收入。取得相关商品控制权,是指能够主导该商品的使用并从中获得几乎全部的经济利益。(五)费用的定义及其确认条件1.费用的定义费用,是指企业在日常活动中发生的、会导致所有者权益减少的、与向所有者分配利润无关的经济利益的总流出。提示:收入是总流入,费用是总流出。如将成本为80万元的商品对外出售,售价为100万元,应确认收入100万元,应确认费用80万元。2.费用的确认条件费用的确认至少应当符合以下条件:一是与费用相关的经济利益应当很可能流出企业;二是经济利益流出企业的结果会导致资产的减少或者负债的增加;三是经济利益的流出额能够可靠计量。(六)利润的定义及其确认条件1.利润的定义利润,是指企业在一定会计期间的经营成果。反映的是企业的经营业绩情况,是业绩考核的重要指标。2.利润的来源构成收入减去费用后的净额、直接计入当期利润的利得和损失等。提示:利得和损失反映的是净额。如将账面价值为80万元的固定资产对外出售,售价为100万元,应确认利得20万元。3.利润的确认条件利润反映的是收入减去费用、利得减去损失后的净额,因此,利润的确认主要依赖于收入和费用以及利得和损失的确认,其金额的确定也主要取决于收入、费用、利得、损失金额的计量。注:本文知识点整理自东奥张志凤老师-基础精讲班课程讲义●●●●●2022年注会考试基础阶段备考资料推荐全年学习计划2022年注会全年学习计划!基础阶段备考正在进行中教材变化解读张志凤老师:2022年注会会计教材变化解读及备考建议名师课程免费听2022年注会新课开讲!32位名师课程免费听,赶快收藏!轻松过关®试读2022年注会《轻松过关®》系列图书试读来袭!2022年注会考试备考正在进行中,每日打卡,和小编一起坚持到最后吧啊!(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-03 注会会计要素及分录 会计要素的

  • 2022年注会会计重要知识点:会计要素计量属性及其应用原则

    注册会计师备考的号角已经吹响,想要在竞争中取得成功,那就要不懈奋斗!!为了帮助考生朋友们明确备考重点,小编整理了注册会计师考试会计科目的重要知识点,请各位考生跟紧小编的节奏,一起备考吧!【内容导航】会计要素计量属性及其应用原则【所属章节】第一章总论——第四节会计要素及其确认与计量【知识点】会计要素计量属性及其应用原则会计要素计量属性及其应用原则(一)会计要素计量属性1.历史成本在历史成本计量下,资产按照购置时支付的现金或者现金等价物的金额,或者按照购置资产时所付出的对价的公允价值计量;负债按照因承担现时义务而实际收到的款项或者资产的金额,或者承担现时义务的合同金额,或者按照日常活动中为偿还负债预期需要支付的现金或者现金等价物的金额计量。2.重置成本在重置成本计量下,资产按照现在购买相同或者相似资产所需支付的现金或者现金等价物的金额计量;负债按照现在偿付该项债务所需支付的现金或者现金等价物的金额计量。3.可变现净值在可变现净值计量下,资产按照其正常对外销售所能收到现金或者现金等价物的金额扣减该资产至完工时估计将要发生的成本、估计的销售费用以及相关税费后的金额计量。4.现值在现值计量下,资产按照预计从其持续使用和最终处置中所产生的未来净现金流入量的折现金额计量;负债按照预计期限内需要偿还的未来净现金流出量的折现金额计量。5.公允价值公允价值,是指市场参与者在计量日发生的有序交易中,出售一项资产所能收到或者转移一项负债所支付的价格。(二)各会计要素计量属性之间的关系历史成本通常反映的是资产或者负债过去的价值,而重置成本、可变现净值、现值以及公允价值通常反映的是资产或者负债的现时成本或者现时价值,是与历史成本相对应的计量属性。(三)会计要素计量属性的应用原则企业在对会计要素进行计量时,一般应当采用历史成本。在某些情况下,为了提高会计信息质量,实现财务报告目标,企业会计准则允许采用重置成本、可变现净值、现值、公允价值计量的,应当保证所确定的会计要素金额能够取得并可靠计量,如果这些金额无法取得或者可靠地计量的,则不允许采用其他计量属性。注:本文知识点整理自东奥张志凤老师-基础精讲班课程讲义●●●●●2022年注会考试基础阶段备考资料推荐全年学习计划2022年注会全年学习计划!基础阶段备考正在进行中教材变化解读张志凤老师:2022年注会会计教材变化解读及备考建议名师课程免费听2022年注会新课开讲!32位名师课程免费听,赶快收藏!轻松过关®试读2022年注会《轻松过关®》系列图书试读来袭!2022年注会考试备考正在进行中,注会的学习需要日积月累,和小编一起坚持到最后吧!(本文为东奥会计在线原创文章,仅供考生学习使用,禁止任何形式的转载)...

    2022-04-05 注会会计要素及分录 会计要素的

  • 全球视野与地方凝视:区域生产视角下的佛山历史文化名城发展与重构(txt+pdf+epub+mobi电子书下载)|百度网盘下载

    ...

    2022-04-02

  • 《Docker生产环境实践指南》|百度网盘下载

    作者:[美]乔?约翰斯顿(JoeJohto)[西]安东尼?巴彻勒(AtoiBatchelli)出版社:人民邮电出版社格式:AZW3,DOCX,EPUB,MOBI,PDF,TXTDocker生产环境实践指南试读:前言Docker是基础设施的新成员。很少有新兴技术能像它这样,在DevO和基础设施领域中快速风靡起来。在不到两年的时间内,Google、亚马逊、微软、IBM以及几乎所有云供应商都宣布支持运行Docker容器。大量与Docker相关的创业公司在2014年和2015年年初都获得了风险资本的投资。Docker开源技术背后的同名公司——Docker公司,在2015年第一季度的D轮融资中估值为10亿美元左右。大大小小的公司都在转换其应用,使之运行于容器内,以此实现面向服务架构(SOA)和微服务。不论是参加从旧金山到柏林的任何DevO聚会,还是阅读最热门的公司工程博客,都可以看出全世界的运维领导者们如今都在云上运行Docker。毫无疑问,容器已经成为应用程序打包和基础设施自动化的重要组成部分。但有一个棘手的问题,促使本书作者和同僚们创作了另一本Docker图书。本书面向的读者具有中高级DevO和运维背景的读者将从本书获益最多。因而,强烈建议读者应具备在生产环境中运行服务器以及创建和管理容器这两方面的基本经验。很多图书和博客文章已经涵盖了与Docker安装及运行相关的话题,但能把在生产环境中运行Docker时产生的大量甚至是令人挠头的关注点结合在一起的材料则少之又少。不用担心,如果你很喜欢《盗梦空间》(Icetio)这部电影,在云服务器的虚拟机中运行容器会让你感觉很自然。本书将带读者深入理解生产环境中架构的组成部分、关注点,以及如何运行基于Docker的基础设施。谁真的在生产环境中使用Docker换个更深刻的说法,对于在真实生产环境中使用Docker遇到的问题,如何找到解决之道?本书综合了访谈、真实公司端到端的生产环境实例,以及来自DevO杰出专家的参考文献,以此来解答这些问题。虽然本书包含了一些有用的示例,但它并不是一本复制粘贴的“教程式”参考书。相反,本书侧重于生产环境中对前沿技术进行评估、风险抵御及运维所需的实践理论和经验。作为作者,我们希望这本书所包含的内容能够为那些正在评估如何及何时将Docker相关技术引入其DevO栈的团队提供一个可靠的决策指南,这远比代码片段要来得长久。生产环境中运行的Docker为企业提供了多个新的运行和管理服务器端软件的方式。很多现成的用例讲解了如何使用Docker,但很少有公司公开分享过他们的全栈生产环境经验。本书汇集了作者在生产环境中运行Docker的多个实例和一组选定的友好公司分享的使用经验。为什么使用DockerDocker所使用的底层容器技术已经存在了很多年,甚至早于dotCloud这家平台即服务(PaaS)创业公司,即后来我们所熟知的Docker。在dotCloud之前,许多知名的公司(如Heroku和Iro.io)已经在生产环境中运行大型容器集群,以获取额外的超越虚拟机的性能优势。与虚拟机相比,在容器中运行软件赋予了这些公司秒级而非分钟级的实例启动与停止的能力,同时能使用更少的机器运行更多实例。既然这项技术并不新鲜,为什么Docker能获得如此巨大的成功呢?主要是因为它的易用性。Docker创造了一种统一的方式,通过简便的命令行及HTTPAPI工具来打包、运行和维护容器。这种简化降低了将应用程序及其运行时环境打包成一个自包含镜像的入门门槛,使之变得可行且有趣,而不需要类似Chef、Puet及Caitrao之类的配置管理和发布系统。Docker提供了一种统一手段,将应用程序及其运行时环境打包到一个简单的Dockerfile里,这从根本上改变了开发人员与DevO团队之间的交互界面。从而极大简化了开发团队与DevO之间的沟通需求与责任边界。在Docker出现之前,各个公司的开发与运维团队之间经常会爆发史诗般的战争。开发团队想要快速前进,整合最新版的软件及依赖,以及持续部署。运维团队则以保证稳定为己任,他们负责把关可以运行于生产环境中的内容。如果运维团队对新的依赖或需求感到不适,他们通常会站在保守的立场上,要求开发人员使用旧版软件以确保糟糕的代码不会搞垮整台服务器。Docker一下子改变了DevO的决策思维,从“基本上说不”变成了“好的,只要运行在Docker中就可以”,因为糟糕的代码只会让容器崩溃,而不会影响到同一服务器上的其他服务。在这种泛型中,DevO有效地负责为开发人员提供PaaS,而开发人员负责保证其代码能正常运行。如今,很多团队将开发人员加入到PagerDuty中,以监控他们在生产环境中的代码,让DevO和运维人员专注于平台的稳定运行及安全。开发环境与生产环境对大多数团队而言,采用Docker是受开发人员更快的迭代和发布周期需求推动的。这对于开发环境是非常有益的,但对于生产环境,在单台宿主机上运行多个Docker容器可能会导致安全漏洞,这一点我们将在第6章“安全”中讲述。事实上,几乎所有关于在生产环境中运行Docker的话题都是围绕着将开发环境与生产环境区分开的两个关注点进行的:一是编排,二是安全。有些团队试图让开发环境和生产环境尽可能保持一致。这种方法看起来很好,但是限于开发环境这样做所需定制工具的数量又或者说模拟云服务(如AWS)的复杂度,这种方法并不实际。为了简化这本书的范畴,我们将介绍一些部署代码的用例,但判定最佳开发环境设置的实践机会将留给读者。作为基本原则之一,尽量保持生产环境和开发环境的相似性,并使用一个持续集成/持续交付(CI/CD)系统以获取最佳结果。我们所说的“生产环境”对于不同的团队,生产环境意味着不同的东西。在本书中,我们所说的生产环境是指真实客户用于运行代码的环境。这是相对于开发环境、预演环境及测试环境而言的,后者的停机时间不会被客户感知到。在生产环境中,Docker有时是用于接收公共网络流量的容器,有时则是用于处理来自队列负荷的异步的后台作业。不管哪种用途,在生产环境中运行Docker与在其他环境中运行相比,最主要的差异都是需要在其安全性与稳定性上投入较多的注意力。编写本书的动力之一是,与Docker相关的文档和博客文章中缺乏对实际生产环境与其他环境的明确区分。我们认为,80%的Docker博客文章中的建议在尝试在生产环境中运行6个月之后会被放弃(或至少修改)。为什么?因为大多数博客文章中举的都是理想化的例子,使用了最新、最好用的工具,一旦某个极端的情况变成了致命缺陷,这些工具将被遗弃(或延期),被更简单的方法所取代。这是Docker技术生态系统现状的一个反映,而非技术博客的缺陷。总的来说,生产环境很难管理。Docker简化了从开发到生产的工作流程,但同时增加了安全和编排的复杂度(更多关于编排的内容参见第4章)。为了节省时间,下面给出本书的重点综述。所有在生产环境中运行Docker的团队,都会在传统的安全最佳实践上做出一项或多项妥协。如果无法完全信任容器内运行的代码,那么就只得选用容器与虚拟机一对一的拓扑方式。对于很多团队而言,在生产环境中运行Docker的优势远远大于其带来的安全与编排问题。如果遇到工具方面的问题,请等待一到两个月,以便Docker社区对其进行修复,不要浪费时间去修补其他人的工具。保持Docker设置最小化。让一切自动化。最后,对成熟的编排工具(如Meo、Kuerate等)的需求远比想象的要少得多。功能内置与组合工具Docker社区一个常见的口头禅是“电池内置但可移除”,指的是将很多功能捆绑在一起的单体二进制文件,这有别于传统Uix哲学下相对较小、功能单一、管道化的二进制文件。这种单体式的做法是由两个主要因素决定的:(1)使Docker易于开箱即用;(2)Golag缺少动态链接。Docker及多数相关工具都是用Google的Go编程语言编写的,该语言可以简化高并发代码的编写与部署。虽然Go是一门出色的编程语言,但用它来构建的Docker生态系统中也因此迟迟无法实现一个可插拔的架构,在这种架构中可以很容易用替代品对工具进行更换。如果读者有Uix系统背景,最好是编译自己的精简版Docker守护进程,以符合生产环境的需求。如果读者有开发背景,预计到2015[1]年下半年,Docker插件将成为现实。在此期间,估计Docker生态系统中的工具将会出现明显的重叠现象,某些情况下甚至是相互排斥的。换句话说,要让Docker运行于生产环境中,用户的一半工作将是决定哪些工具对自己的技术栈最有意义。与DevO所有事情一样,先从最简单的解决方案入手,然后在必要时增加其复杂性。2015年5月,Docker公司发布了Comoe、Machie及Swarm,与Docker生态系统内的同类工具进行竞争。所有这些工具都是可选的,请根据实际情况对其进行评估,而不要认为Docker公司提供的工具就一定是最佳解决方案。探索Docker生态系统时的另一项关键建议是:评估每个开源工具的资金来源及其商业目标。目前,Docker公司和CoreOS经常发布工具,以争夺关注度和市场份额。一个新工具发布后,最好等上几个月,看看社区的反应,不要因为它看起来很酷就切换到最新、最好用的工具上。哪些东西不要Docker化最后一个关键点是,不要期望能在Docker容器中运行所有东西。Heroku风格的“十二要素”(12factor)应用是最容易Docker化的,因为它们不维护状态。在理想的微服务环境中,容器能在几毫秒内启动、停止而不影响集群的健康或应用程序的状态。类似CluterHQ这样的创业公司正着手实现Docker化数据库和有状态的应用程序,但眼下,由于编排和性能方面的原因,可能需要继续直接在虚拟机或裸机上运行数据库。[2]Docker还不适用于任何需要动态调整CPU和内存要求的应用。允许动态调整的代码已经完成,但尚不清楚何时才能在一般的生产环境中投入使用。目前,若对容器的CPU和内存的限制进行调整,需要停止并重新启动容器。另外,对网络吞吐量有高要求的应用进行最佳优化时不要使用Docker,因为Docker使用itale来完成宿主机IP到容器IP的NAT转换。通过禁用Docker的NAT来提升网络性能是可行的,但这是一个高级的使用场景,很少有团队会在生产环境中这么做。技术审稿人衷心感谢以下技术审稿人提供的早期反馈及细致的评论:MikaTurue、XavierBruhiere和FelixRae。[1]Docker1.7版中正式引入了插件系统。——译者注[2]Docker1.10版中新增的dockerudate命令可实现CPU和内存的动态调整。——译者注第1章入门建立Docker生产环境系统的首要任务,是以一个有助于想象各组件如何相互配合的方式来理解其术语。与其他快速发展的技术生态系统一样,我们可以预见,Docker野心勃勃的市场营销、不完善的文档以及过时的博客文章将造成使用者对各个工具职责理解上的混乱。我们将在本章中定义贯穿全书的术语和概念,而非提供一份统一的Docker百科全书。通常情况下,我们的定义与生态系统中的大体一致,但如果你所阅读的博客文章中使用了不同的术语也不用太过惊讶。在本章中,我们将介绍在生产环境中运行Docker的核心概念以及不涉及具体技术的容器常识。在随后的章节中,我们将讨论真实世界的生产环境用例,并详细说明其组件和供应商信息。1.1术语下面让我们来看一下本书所采用的Docker术语。1.1.1镜像与容器●镜像是指文件系统快照或tar包。●容器是指镜像的运行态。1.1.2容器与虚拟机●虚拟机持有整个操作系统和应用程序的快照。●虚拟机运行着自己的内核。●虚拟机可以运行Liux之外的其他操作系统。●容器只持有应用程序,不过应用程序的概念可以延伸到整个Liux发行版。●容器共享宿主机的内核。●容器只能运行Liux,不过在同一宿主机上运行的每个容器都可包含不同的发行版。1.1.3持续集成/持续交付在应用程序新代码提交或触发其他条件时,系统自动构建新镜像并进行部署。1.1.4宿主机管理设置/配备一台物理服务器或虚拟机以便用于运行Docker容器的过程。1.1.5编排编排(orchetratio,也称编配)这个术语在Docker生态系统中有多种含义。通常情况下,它包括调度和集群管理,不过有时也包括了宿主机管理。在本书中,我们将编排作为一个松散的总称,包括容器调度的过程、集群的管理、容器的链接(发现),以及网络流量路由。或者换句话说,编排是个控制器进程,用于决定在哪里运行容器,以及如何让集群知道可用的服务。1.1.6调度用于决定哪些容器可以以给定的资源约束(如CPU、内存和IO)运行在哪些宿主机上。1.1.7发现容器如何公开服务给集群,以及发现如何查找其他服务并与之通信的过程。举个简单的用例:一个网站应用容器发现如何连接到数据库服务。Docker文档中的发现是指将容器链接在一起,不过在生产级系统中,通常使用的是更复杂的发现机制。1.1.8配置管理配置管理过去常常指的是Docker出现之前的自动化工具,如Chef和Puet。大多数的DevO团队正在转移到Docker上,以消除这类配置管理系统的复杂度。在本书的示例中,配置管理工具只用于配备具有Docker和少量其他东西的宿主机。1.2从开发环境到生产环境本书着重于生产环境或非开发环境中的Docker,这意味着我们不会花太多的篇幅在开发环境中Docker的配置和运行上。但由于所有服务器都在运行代码,如何看待在Docker和非Docker系统中的应用程序代码还是值得简单讨论一下的。与Chef、Puet和Aile这类传统配置系统不同,Docker最好的使用方式是将应用程序代码预先打包成一个Docker镜像。镜像通常包含所有的应用程序代码、运行时的依赖以及系统的需求。而包含数据库凭证和其他敏感信息的配置文件通常在运行时添加,而非内建到镜像中。有些团队会在开发机上手工构建Docker镜像,然后推送到镜像仓库,之后再从仓库中拉取镜像到生产环境宿主机中。这是个很简单的用例。虽然行得通,但从工作流和安全角度考虑并不理想。一个更常见的生产环境示例是,使用持续集成/持续交付系统在应用程序代码或Dockerfile文件发生变更时自动构建新镜像。1.3使用Docker的多种方式过去的几年时间,科技发生了巨大变化,从物理服务器到虚拟服务器,再到拥有PaaS环境的云计算。不论是否采用了全新架构,Docker镜像都可以在当前环境中很容易地被使用。要使用Docker,并不需要立即从单体应用程序迁移到面向服务架构。有很多用例允许在不同层次上集成Docker。Docker常用于以下场景。●使用以镜像为基础的部署方式取代类似Caitrao的代码部署系统。●安全地在同一台服务器中运行遗留应用和新应用。●使用一个工具链循序渐进地迁移到面向服务架构。●管理云端或裸机上的水平扩展性和弹性。●确保从开发环境到预演环境到生产环境跨环境的一致性。●简化开发人员的机器设置和一致性。将应用的后台程序迁移到Docker集群中,同时保持网页服务器和数据库服务器不变是开始使用Docker的常见示例。另一示例是将应用的部分RESTAPI迁移到Docker中运行,前端使用Ngix代理在遗留服务和Docker集群之间路由通信。通过使用此类技术,团队可以渐进式地从单体应用无缝地迁移到面向服务架构。如今的应用程序往往需要几十个第三方库,用于加速功能开发或连接第三方SaaS和数据库服务。每个库都可能产生ug,或是让用户陷入版本依赖的泥沼。再加上库的频繁更改,要在基础设施上完成工作代码的持续部署而不引起失败,压力巨大。Docker可贵的镜像思想使得技术团队在部署工作代码时,不论是单体架构、面向服务或是二者的混合,由于代码及其依赖项捆绑在同一个镜像中,所使用的方式对每次部署都是可测试、可重复、文档化且一致的。一旦一个镜像构建完毕,就可以部署到任意多个运行着Docker守护进程的服务器上。另外一个常见的Docker用例是跨环境部署一个单一容器,其典型的代码路径是从开发环境到预演环境再到生产环境。容器为整个代码路径提供了一个一致的、可测试的环境。作为一个开发人员,Docker模型允许在其个人电脑上调试与生产环境完全一致的代码。开发人员可以很容易地下载、运行和调试有问题的生产环境镜像,且无需事先对本地开发环境进行修改。1.4可预期的情况在生产环境中运行Docker容器困难不小,但还是能实现的。每天都有越来越多公司开始在生产环境中运行Docker。如同所有的基础设施一样,我们建议以小规模入手,然后渐进式地完成迁移。为什么Docker在生产环境如此困难对生产环境有很多要求:安全可靠的部署、健康检查、最小或零停机时间、从失败中恢复的能力(回滚)、一个集中存储日志的方式、一种分析或调试应用的方式,以及一种聚合监控参数的方式。类似Docker这样的新技术虽然使用起来非常有趣,但还需要时间来完善。Docker在可移植性、一致性以及打包具有众多依赖的服务这些方面非常有优势。多数团队会因为以下一个或多个痛点而坚持使用Docker。●一个应用的不同部分使用大量不同的依赖。●支持使用旧依赖的遗留应用程序。●开发团队与DevO之间的工作流问题。本书中我们所采访的团队,有一个共同的警示:切勿尝试在一个组织内让采用Docker这事一蹴而就。即便运维团队已经为采用Docker做好了充分的准备,也请记住,过渡到Docker通常意味着将管理依赖的重任推给了开发人员。虽然很多开发人员都渴求这种自主权,以便加快迭代,但并非每位开发人员都有能力或兴趣将其列入自己的责任范围。为了能有一个良好的Docker工作流,还是需要花些时间来转变企业文化。在第2章中,我们将阐述Docker的技术栈。第2章技术栈生产环境的Docker设置包括了一些基本的架构组件,这些组件对运行容器化的及传统的服务器集群来说是通用的。在很多方面,可以简单地认为构建和运行容器的方式与当前构建和运行虚拟机的方式是一样的,只是使用了一套新的工具和技术。(1)构建并保存镜像快照。(2)将镜像上传到仓库中。(3)下载镜像到某台宿主机中。(4)以容器方式运行镜像。(5)将容器连接到其他服务上。(6)路由流量到容器中。(7)将容器日志发送到指定位置。(8)监控容器。与虚拟机不同的是,容器通过将宿主机(裸机或虚拟机)与应用程序服务隔离,从而提供了更高的灵活性。这为构建和配备流程带来了直接的改善,但由于额外的容器嵌入层,会增加一些开销。典型的Docker技术栈将包括用于解决以下关注点的组件:●构建系统;●镜像仓库;●宿主机管理;●配置管理;●部署;●编排;●日志;●监控。2.1构建系统●如何构建镜像,并将其推送到镜像仓库中?●Dockerfile位于何处?构建Docker镜像通常有以下两种方式。(1)在开发人员电脑上手工构建,然后推送到到仓库中。(2)使用CI/CD系统在代码提交时自动构建。理想的Docker生产环境将使用类似Jeki或Codehi这样的CI/CD(配置集成/持续部署)系统,在代码提交时自动构建镜像。一旦容器构建完毕,它将被发送到镜像仓库中,自动化测试系统就可以从中下载并运行该镜像。2.2镜像仓库●Docker镜像保存在哪里?当前的Docker镜像仓库可靠性比较差,但是每个月都在改善。Docker官方的镜像仓库中心是众所周知的不可靠,需要额外的重试和故障保护措施。多数团队一般会在自己的基础设施上运行私有的镜像仓库,以减少网络传输成本和延迟。2.3宿主机管理●如何配备宿主机?●如何升级宿主机?由于Docker镜像包含了应用及其依赖,宿主机管理系统通常只需要添加新服务器,配置访问权限和防火墙,并安装Docker守护进程即可。类似亚马逊的EC2CotaierService这类服务将消除对传统宿主机管理的依赖。2.4配置管理●如何定义容器的集群?●如何处理宿主机和容器运行时的配置?●如何管理密钥和机密信息?一个基本规则是:尽量避免使用传统的配置管理系统。其增加的复杂性往往会造成故障。Aile、SaltStack、Chef或Puet这类工具仅用于配备带有Docker守护进程的宿主机。尽可能试着摆脱对旧的配置管理系统的依赖,并使用本书所述的发现和集群技术转移到自我配置的容器上。2.5部署●如何将容器放置在宿主机上?镜像部署有以下两种基本方法。(1)推送——部署或编排系统将镜像推送给相关宿主机。(2)拉取——事先或按需从镜像仓库拉取镜像。2.6编排●如何将容器组织成集群?●在哪些服务器上运行容器?●如何调度服务器资源?●如何运行容器?●如何将流量路由给容器?●如何让容器公开和发现服务?“编排=强力胶带”。至少多数情况下可以这么认为。市面上有很多处于早期阶段的全功能容器编排系统,如DockerSwarm、Kuerete、Meo和Fly。但对大多数团队而言,这些系统通常过于强大,增加了在生产环境中出现问题时调试的复杂度。决定使用哪个工具来完成编排常常是设置和运行Docker中最艰难的部分。在第3章中,我们将讲述Peerace所采取的一种构建Docker系统的简约方法。第3章示例:极简环境一说起生产环境中容器的使用,大家的第一反应是那些在同样量级的宿主机上部署成千上万容器的大型公司。但实际上恰恰相反,要发挥容器的作用,并不需要构建如此庞大的系统。小规模的团队反而能从容器中获得最大收益,因为容器使构建和部署服务不仅变得简单,而且可重复、可扩展。本章描述的就是一家名为PeerSace的小规模公司构建系统时采取的一种极简方式。这种极简方式使他们能在短时间内使用有限的资源开辟一个新市场,并自始至终保持着极高的开发速度。PeerSace构建系统时的目标是既要易于开发,又要在生产环境中足够稳定。这两个目标通常是相互矛盾的,因为高速开发引起的大量变化反过来会对系统的构建和配置产生很大影响。任何一个有经验的系统管理员都知道,这样的变化率必然导致不稳定性。Docker看起来非常适合用在刚起步的时候,因为它既对开发人员友好,又支持以敏捷的方式构建和运维系统。Docker简化了开发和系统配置的某些方面,但有时却过于简单化了。在易于开发和稳健运维之间取得平衡不是件容易的事。3.1保持各部分的简单PeerSace实现开发速度和稳定的生产环境这两个目标的方法之一是拥抱简单。这里所说的简单是指系统的每个部分——容器——有且只有一个目标。这个目标就是:相同的过程,如日志收集,在任何地方都以相同的方式完成,而各部分连接的方法也是明确、静态地定义在配置文件中的。在这种简单的系统中,开发人员可以同步地、独立地构建系统的不同部分,并确信构建的容器可组装在一起。另外,在生产环境出现问题时,简单性也让问题的排查与解决变得非常简单。要长期保持系统的简单,需要大量的思考、折中和坚持,但最终这种简单将物有所值。PeerSace的系统由20个零散的微服务组成,其中有部分使用了MogoDB数据库和/或ElaticSearch搜索引擎。该系统设计遵循下列指导原则。(1)倾向无状态服务。这可能是简化PeerSace生产环境时最大的决策:大部分服务都是无状态的。除了用于处理当前进行中的请求的临时信息,无状态服务不需要保持任何需要持久化的数据。无状态服务的优势在于可以非常容易地对他们进行销毁、重启、复制及伸缩,所有这一切都无需考虑任何数据处理方面的逻辑。并且,无状态服务更易于编写。(2)倾向静态配置。所有宿主机和服务的配置都是静态的:一旦给服务器推送一项配置,该配置就会一直生效,直至显式地推送来新配置。与之相对的是那些动态配置的系统,其系统的实际配置是实时生成的,并会根据不同因素(如可用宿主机和即将到达的负载)进行自主修改。尽管动态系统的伸缩性更好,并且具有一些有趣的属性,如在出现某些故障时自动恢复等,但静态配置更易于理解和排错。(3)倾向静态的网络布局。如果在一台宿主机中找到一项服务,除非新配置被确定并提交,否则总能在那台宿主机中找到该服务。(4)区别对待无状态和有状态服务。尽管PeerSace的多数服务是无状态的,他们还是使用MogoDB和ElaticSearch来持久化数据。这两种类型的服务在本质上是非常不同的,应该区别处理。例如,将一个无状态服务从一台宿主机移动到另一台上非常简单,只需要启动新服务,然后停止旧服务即可。但要对一个数据库进行移动,数据也要跟着移动。移动数据可能会花费很长时间,要求在迁移过程中停止服务,或通过设备方法进行在线迁移。在开发领域,通常将无状态服务比做“牲口”,它们没有名字,很容易被代替和伸缩,而将有状态服务比做“宠物”,它们是唯一的、具名的,需要维护,并且难以伸缩。幸运的是,PeerSace正如一个农场一样,其“牲口”数量要远远多于“宠物”。以上这些设计原则是简化PeerSace系统的基础。将有状态服务与无状态服务分离,可以对本质上完全不同的服务进行区别处理(如图3-1所示),因此可以对每一种情况的处理方式进行优化和尽可能地简化。使用静态配置运行无状态服务使得操作系统的流程变得非常简单:多数情况下流程被简化成文件复制和容器重启,完全不需要考虑其他因素,如对第三方系统的依赖。图3-1上述设计准则能否产生一个简单的系统,完全取决于系统操作是否同样简单。3.2保持流程的简单在设计业务流程时,PeerSace基于观察做出了如下假定:在他们的基础设施中离硬件越近的层变更越少,而越接近终端用户的层变更越频繁(如图3-2所示)。图3-2根据这一观察,生产环境中的服务器数量很少变更,通常是由于缩放问题或硬件故障。而这些服务器的配置变更频次可能更高一些,通常是由于性能补丁、系统错误修复或安全问题等原因。在这些服务器上运行的服务数量和类别变更更为频繁。通常是指移动服务、添加新类型服务或对数据进行操作。这个层级上的其他修改可能与要求重新配置或变更第三方服务的新版本部署有关。不过,这类变更仍然不是很常见。在这样的基础设施中,多数的变更与多个服务的新版本推送有关。每天,PeerSace都会执行很多次新版服务的部署。多数情况下,新版本的推送只是简单地将现有版本替换成运行新镜像的新版本。有时也会使用相同镜像,但对配置参数进行变更。PeerSace的流程建立是为了让最频繁的变更最容易也最简单进行,即便这样会造成基础设施更难以变更(实际上并未发生)。3.3系统细节PeerSace运行着3个类生产环境集群:集成环境、预演环境与生产环境。每个集群包含了相同数量的服务,并使用相同的方式进行配置,唯一不同的是它们的原始性能(CPU、内存等)。开发人员同样会在自己的电脑上运行全部或部分集群。每个集群由以下几个部分组成:●几台运行着CetOS7的Docker宿主机,使用ytemd作为系统管理程序;●一台MogoDB服务器或一个复制集合;●一台ElaticSearch服务器或一个集群。MogoDB和/或ElaticSearch服务器可能在某些环境中是Docker化的,而在其他环境中不是Docker化的(如图3-3所示)。它们也会在多个环境中共享。在生产环境中,出于运维和性能的原因,这些数据服务是不做Docker化的。图3-3每个Docker宿主机运行着一个服务的静态集合,所有这些服务都会遵循如下模式进行构建:●所有配置都通过环境变量进行设置,包括其他服务的地址(和端口);●不将数据写入磁盘;●将日志发送到标准输出(tdout)中;●生命周期由ytemd管理,并定义在一个ytemd单元文件中。利用ytemd所有服务都由ytemd管理。ytemd是一个借鉴了OSXlauchd的服务管理程序,此外,ytemd使用普通数据文件命名单元来定义每个服务的生命周期(如图3-4所示),这与其他使用hell脚本完成这类事务的传统管理程序完全不同。图3-4PeerSace的服务只将Docker进程当作唯一的运行时的依赖。ytemd的依赖管理只用来确保Docker处于运行状态,但不确保其拥有的服务以正确顺序启动。服务构建时要求它们可以以任何顺序启动。所有服务都由以下部分组成(如图3-5所示):●一个容器镜像;●一个ytemd单元文件;●一个该容器专用的环境变量文件;●一组用于全局配置参数的共享环境变量文件。图3-5所有单元都遵循相同的结构。在服务启动之前,一系列包含环境变量的文件将被加载:EvirometFile=/ur/etc/ervice-locatio.evEvirometFile=/ur/etc/ervice-cofig.evEvirometFile=/ur/etc/cluter.evEvirometFile=/ur/etc/ecret.evEvirometFile=/ur/etc/%.ev这确保了每个服务会加载一系列通用环境文件(ervice-locatio.ev、ervice-cofig.ev、cluter.ev及ecret.ev),外加一个专用于该服务的文件:%.ev,此处的%在运行时将被替换成该单元的全称。例如,一个名为docker-earch的服务单元将被替换成docker-earch.ervice。接下来的条目是确保在启动新容器前旧容器被正确删除的:ExecStartPre=-/i/dockerkill%ExecStartPre=-/i/dockerrm-f%通过使用%,将容器命名为单元的全称。使用变量进行容器命名能让单元文件更通用并且可移植。在docker程序路径之前使用“-”可防止单元在命令失败时中止启动。这里需要忽略潜在的错误,因为如果此前不存在该容器,这些命令将执行失败,而这种情况又是合法的。单元中主要的条目是ExecStart,它将告之ytemd如何启动该容器。这里内容较多,但我们只关注一下其最重要的部分:ExecStart=/i/docker\ru\-"${APP_PORT}:${APP_PORT}"\-e"APP_PORT=${APP_PORT}"\-e"SERVICE_C_HOST=${SERVICE_C_HOST}"\-e"SERVICE_D_HOST=${SERIVCE_D_HOST}"\-e"SERVICE_M_HOST=${SERVICE_M_HOST}"\--add-hotdocker01:${DOCKER01_IP}\--add-hotdocker02:${DOCKER02_IP}\--volume/ur/local/docker-data/%/d:/data/data\--volume/ur/local/docker-data/%/log:/data/log\--ame%\${IMAGE_NAME}:${IMAGE_TAG}(1)使用EvirometFile加载的环境变量来配置容器(如通过-公开的端口)。(2)将集群中的其他宿主机地址添加到容器的/etc/hot文件中(--add-hot)。(3)映射用于日志和数据的数据卷。这主要是作为一个“蜜罐”[1](hoeyot),以便检查这些目录并确保无人对其进行写入。(4)镜像自身(名称和版本)来自于从/ur/etc/%.ev中加载的环境变量,在本示例中它将映射到/ur/etc/docker-earch.ervice.ev中。最后,是一些定义如何停止容器及其他生命周期要素的条目:ExecSto=-/i/dockerto%Retart=o-failureRetartSec=1TimeoutStartSec=120TimeoutStoSec=303.4集群范围的配置、通用配置及本地配置PeerSace将集群配置分成两种类型文件:环境变量文件和ytemd单元文件。上面已经讲述了单元文件及其加载环境变量文件的方式,接下来看一下环境文件。将环境变量分解到不同文件中的主要原因在于,这些文件在跨集群时是否需要修改以及如何修改,不过也有其他操作层面的原因。●ervice-locatio.ev:集群中所有服务的宿主机名。这个文件在不同集群里通常是一样,不过也有例外。●ervice-cofig.ev:与服务自身相关的配置。如果不同集群运行的是服务的兼容性版本,这个文件应该是一样的。●ecret.ev:密钥信息。因其内容关系,这个文件被处理的方法与其他文件不同,而且在不同集群上也有差异。●cluter.ev:包括了集群间的所有不同之处,如所使用的数据库前缀、是测试还是生产环境、外部地址等。这个文件中最重要的信息是属于该集群的所有宿主机的IP地址。下面是某些示例集群中的文件。这是cluter.ev文件:CLUSTER_ID=alhaCLUSTER_TYPE="tet"DOCKER01_IP=x.x.x.226DOCKER02_IP=x.x.x.144EXTERNAL_ADDRESS=htt://omethigorother.comLOG_STORE_HOST=x.x.x.201LOG_STORE_PORT=9200MONGODB_PREFIX=alhaMONGODB_HOST_01=x.x.x.177MONGODB_HOST_02=x.x.x.299MONGODB_REPLICA_SET_ID=r001这是ervice-locatio.ev文件:SERVICE_A_HOST=docker01SERVICE_B_HOST=docker03CLIENTLOG_HOST=docker02SERIVCE_D_HOST=docker01...SERVICE_Y_HOST=docker03SERVICE_Z_HOST=docker01每个ytemd单元都包含集群中其他宿主机的引用,而这些引用来自于环境变量。包含服务宿主机名的变量会被装配到Docker命令中,以便容器进程使用。这是通过-e参数实现的,如-e"SERVICE_D_HOST=${SERIVCE_D_HOST}"。Docker宿主机的IP地址也同样通过--add-hotdocker01:${DOCKER01_IP}注入到容器中。这样,只需要修改这两个文件并且保持单元文件的完好无损,就可以将容器扩散到不同数量的宿主机中。3.5部署服务容器级别或配置级别的修改通过3个步骤完成:第1步,在配置仓库(Git)上做修改;第2步,将配置文件复制到宿主机的预演区域(h);第3步,运行宿主机上的一个脚本来逐一部署每个服务,使得配置修改生效。这种方法提供了版本化配置,一次只推送一项相关配置,以及让推送配置生效的一种灵活方式。如果需要针对一组服务进行修改,首先在Git上做修改并提交。然后运行脚本,将这个配置推送到所有宿主机的预演区域。一旦配置被推送过去,在每台宿主机上运行一个脚本来部署或重部署该宿主机上的所有容器集合。这个脚本会对在列的所有服务执行如下命令。(1)将配置文件从预演区域复制到其最终位置:●ytemd单元文件;●共享的配置文件;●当前服务的配置文件;●密钥文件(解密后的)。(2)需要的话下载镜像文件(镜像定义在服务自身的配置文件中)。(3)重载ytemd的配置,以便读取新的单元文件。(4)重启容器对应的ytemd单元。PeerSace具有两个部署工作流,理解这一点有助于阐述其部署流程:一个用于开发环境,另一个用于生产环境,而后者是前者的一个超集。在开发过程中,他们会通过以下步骤将临时构建联署到集成服务器中。(1)使用最新代码库创建一个新的容器镜像。(2)将镜像推送到镜像仓库中。(3)在运行该镜像的容器宿主机上运行部署脚本。开发环境的ytemd单元会追踪镜像的最新版本,所以只要配置不做修改,那我们只需推送镜像并重新部署即可。类生产环境的服务器(生产环境和预演环境)与开发环境配置方式大体相同,主要区别在于生产环境中的容器镜像都打上了版本标签,而非latet。部署发布镜像到类生产环境容器的流程如下。(1)在仓库中为容器镜像运行发布脚本。该脚本将为Git仓库打上新版本标签,然后使用这个版本号构建并推送镜像。(2)更新每个服务环境变量文件以引用新镜像标签。(3)将新的配置推送到各宿主机中。(4)在运行该镜像的容器宿主机上运行部署脚本。他们通常会批次地将服务从开发环境转移到生产环境(一般是两周一次)。在推送发行版到生产环境时,开发环境中用于该发行版的配置文件会被复制到生产目录中。多数文件可以完全照搬,因为它们是从集群的具体细节(IP地址、宿主机数量等)抽象出来的,不过cluter.ev和ecret.ev文件在各个集群中是不一样的,在发行时也对其进行更新。一般情况下,会一次性推送所有新版本服务。3.6支撑服务PeerSace使用了一组服务来支撑自己的服务。这些服务包括以下两个。●日志聚合:fluetd+kiaa以及docker-ge的组合。docker-ge可根据宿主机中运行的容器创建和重创建一个配置文件。docker-ge为每个运行中的容器生成一个fluetd条目,用于发送日志给kiaa。这个服务运行良好,且易于调试。●监控:Datadog——一个SaaS监控服务。Datadog代理在容器中运行,用于监控各项性能指标、API使用情况和业务事件。Datadog为标签提供了丰富的支持,通过fluetd可以使用多种方式对单一事件进行标记。数据收集起来后(如跨集群的相同服务、所有Docker服务、使用某个发行版的所有API端点等),可以利用丰富的标签对数据进行多种方式的切割。3.7讨论在系统中,所有宿主机和服务的配置都非常明确,开发人员很容易理解系统的配置,并能不受干扰地工作于系统的不同部分上。每位开发人员都可以在任何时候对集成集群进行推送,并且推送到生产环境所需的协调也很少。由于每个集群的配置都保存在Git上,很容易追踪配置的变化,并在出现配置问题时对集群进行排错。因为配置推送的方式,一旦新配置设置妥当,该配置将保持不变。静态配置带来的是极大的稳定性。另外,服务编写的方式,如通过环境变量进行配置、日志写入控制台、无状态等,使得它们之后可原封不动地被Meo或Kuerete这类集群管理工具使用。当然,要得到这些好处是有代价的。一个最明显的缺点是配置有些繁琐、重复并且易出错。我们可以通过大量的自动化的工具来生成这些配置文件。修改全局配置要求重启多个容器。目前是由开发人员来重启正确的容器。在生产环境中,如果推送的修改很多,通常会执行滚动重启,但这并不是一个很好的解决方法。这绝对是一个薄弱环节,但到目前为止,还是可控的。3.8未来PeerSace正在考虑几个系统扩展的方式。其中之一是通过反向代理实现零停机时间部署。这将使得PeerSace有能力对每个服务进行水平扩展。另外一个方向是从集群的更高层级描述中生成所有的配置文件。这种方法能在配置发生改变后计算哪些容器需要重启。在考虑这些未来的方向时,PeerSace也在权衡使用Meo或Kuerete的可能性,因为他们认为,增加部署脚本的任何复杂度势必造成对简单模式的过度拉伸。3.9小结尽管本章讲解了一个极其简单的Docker使用方式,但我们仍希望它能成为“Docker思想”的基石。不论是使用极简方式还是集群管理系统,读者都能利用这种方式在阅读本书其他部分时获益。当然,使用Docker还有很多其他方式,第4章将讲述RelateIQ使用Docker运行了一年多的一个真实的We服务器生产环境。[1]用于隐藏宿主机的真实路径。——译者注第4章示例:We环境我们所知的大多数公司都曾以一个很低的容器和宿主机比例(1~2个容器对应1台宿主机)成功地使用过Docker。也就是说,要在生产环境中成功运行Docker,并不是必须要运行AacheMeo或[1]Kuerate。在本示例中,将对RelateIQ公司使用Docker运行了一年多的一个真实We服务器生产环境做详细的说明。这个环境在运行Uutu的标准亚马逊云服务(AWS)实例上,使用Docker支撑其CRMWe应用。当初使用Docker的原因有三:一是Docker能快速生成和销毁容器,从而为客户提供零停机时间部署;二是因为Docker为不同We版本提供依赖隔离;三是Docker支持即时回滚。图4-1所示为该环境的高层次示图。图4-1相信吗?这个We环境提供了如下功能:稳定的零停机时间部署、回滚、集中式日志、监控及分析JVM的一种方式。所有这些都是通过ah脚本编排Docker镜像获得的。图4-2所示为主机的详细情况。图4-2这台We服务器运行于单台AWS服务器上,并通过Docker运行着4个容器。部分容器被链接在一起,以便与Docker网桥上的其他容器进行通信。它给宿主机公开了多个端口,用于为性能分析提供HTTP服务和JVM监控。它使用了亚马逊ELB负载均衡器(健康检查在其上进行)。所有容器都将它们的日志保存在宿主机上,这样现有的日志方案(SumoLogic)依旧适用,同时有一个简单的ah编排脚本用于部署和设置新版本We服务。为了便于理解很多公司在生产环境中运行Docker时会遇到的问题,我们来看一些具体细节。4.1编排编排归根到底就是做两件事:一是获取已安装Docker的服务器,并且使之准备好运行容器的服务器;二是在服务器上启动并运行容器。4.1.1让服务器上的Docker进入准备运行容器的状态该服务器使用标准的基本UutuAMI(亚马逊机器镜像)在AWS上部署,并通过Chef的标准配置管理系统对宿主机进行设置。其设置过程与当下的多数环境完全相同。服务器启动之后,Chef就会运行并设置h用户、h密钥,然后通过其包安装器安装基础包(如iotat),安装并配置监控代理(本例中是Datadog),集合一些临时磁盘空间用于数据或日志存储,安装并配置日志代理(SumoLogic),安装最新版Docker,最后创建ah设置脚本,并配置一个cro任务来运行它。Chef在服务器上运行之后,宿主机就准备好在其上运行机器所需的任何容器了。Chef还配置了监控和日志软件,用于未来的调试。这个环境可以运行任何类型的容器服务,与当下运行的大多数服务器环境,甚至是物理环境也一般无二。现在,Docker已经安装完毕,宿主机也准备好核心操作工具,下面就可以让宿主机上的容器开始运行试读结束[说明:试读内容隐藏了图片]点击下载...

    2022-04-04 生产环境 虚拟机 运行 docker 生产环境虚拟机用动态内存还是固定内存

  • Docker生产环境实践指南(txt+pdf+epub+mobi电子书下载)|百度网盘下载

    作者:[美]乔?约翰斯顿(JoeJohto)[西]安东尼?巴彻勒(AtoiBatchelli)出版社:人民邮电出版社格式:AZW3,DOCX,EPUB,MOBI,PDF,TXTDocker生产环境实践指南试读:前言Docker是基础设施的新成员。很少有新兴技术能像它这样,在DevO和基础设施领域中快速风靡起来。在不到两年的时间内,Google、亚马逊、微软、IBM以及几乎所有云供应商都宣布支持运行Docker容器。大量与Docker相关的创业公司在2014年和2015年年初都获得了风险资本的投资。Docker开源技术背后的同名公司——Docker公司,在2015年第一季度的D轮融资中估值为10亿美元左右。大大小小的公司都在转换其应用,使之运行于容器内,以此实现面向服务架构(SOA)和微服务。不论是参加从旧金山到柏林的任何DevO聚会,还是阅读最热门的公司工程博客,都可以看出全世界的运维领导者们如今都在云上运行Docker。毫无疑问,容器已经成为应用程序打包和基础设施自动化的重要组成部分。但有一个棘手的问题,促使本书作者和同僚们创作了另一本Docker图书。本书面向的读者具有中高级DevO和运维背景的读者将从本书获益最多。因而,强烈建议读者应具备在生产环境中运行服务器以及创建和管理容器这两方面的基本经验。很多图书和博客文章已经涵盖了与Docker安装及运行相关的话题,但能把在生产环境中运行Docker时产生的大量甚至是令人挠头的关注点结合在一起的材料则少之又少。不用担心,如果你很喜欢《盗梦空间》(Icetio)这部电影,在云服务器的虚拟机中运行容器会让你感觉很自然。本书将带读者深入理解生产环境中架构的组成部分、关注点,以及如何运行基于Docker的基础设施。谁真的在生产环境中使用Docker换个更深刻的说法,对于在真实生产环境中使用Docker遇到的问题,如何找到解决之道?本书综合了访谈、真实公司端到端的生产环境实例,以及来自DevO杰出专家的参考文献,以此来解答这些问题。虽然本书包含了一些有用的示例,但它并不是一本复制粘贴的“教程式”参考书。相反,本书侧重于生产环境中对前沿技术进行评估、风险抵御及运维所需的实践理论和经验。作为作者,我们希望这本书所包含的内容能够为那些正在评估如何及何时将Docker相关技术引入其DevO栈的团队提供一个可靠的决策指南,这远比代码片段要来得长久。生产环境中运行的Docker为企业提供了多个新的运行和管理服务器端软件的方式。很多现成的用例讲解了如何使用Docker,但很少有公司公开分享过他们的全栈生产环境经验。本书汇集了作者在生产环境中运行Docker的多个实例和一组选定的友好公司分享的使用经验。为什么使用DockerDocker所使用的底层容器技术已经存在了很多年,甚至早于dotCloud这家平台即服务(PaaS)创业公司,即后来我们所熟知的Docker。在dotCloud之前,许多知名的公司(如Heroku和Iro.io)已经在生产环境中运行大型容器集群,以获取额外的超越虚拟机的性能优势。与虚拟机相比,在容器中运行软件赋予了这些公司秒级而非分钟级的实例启动与停止的能力,同时能使用更少的机器运行更多实例。既然这项技术并不新鲜,为什么Docker能获得如此巨大的成功呢?主要是因为它的易用性。Docker创造了一种统一的方式,通过简便的命令行及HTTPAPI工具来打包、运行和维护容器。这种简化降低了将应用程序及其运行时环境打包成一个自包含镜像的入门门槛,使之变得可行且有趣,而不需要类似Chef、Puet及Caitrao之类的配置管理和发布系统。Docker提供了一种统一手段,将应用程序及其运行时环境打包到一个简单的Dockerfile里,这从根本上改变了开发人员与DevO团队之间的交互界面。从而极大简化了开发团队与DevO之间的沟通需求与责任边界。在Docker出现之前,各个公司的开发与运维团队之间经常会爆发史诗般的战争。开发团队想要快速前进,整合最新版的软件及依赖,以及持续部署。运维团队则以保证稳定为己任,他们负责把关可以运行于生产环境中的内容。如果运维团队对新的依赖或需求感到不适,他们通常会站在保守的立场上,要求开发人员使用旧版软件以确保糟糕的代码不会搞垮整台服务器。Docker一下子改变了DevO的决策思维,从“基本上说不”变成了“好的,只要运行在Docker中就可以”,因为糟糕的代码只会让容器崩溃,而不会影响到同一服务器上的其他服务。在这种泛型中,DevO有效地负责为开发人员提供PaaS,而开发人员负责保证其代码能正常运行。如今,很多团队将开发人员加入到PagerDuty中,以监控他们在生产环境中的代码,让DevO和运维人员专注于平台的稳定运行及安全。开发环境与生产环境对大多数团队而言,采用Docker是受开发人员更快的迭代和发布周期需求推动的。这对于开发环境是非常有益的,但对于生产环境,在单台宿主机上运行多个Docker容器可能会导致安全漏洞,这一点我们将在第6章“安全”中讲述。事实上,几乎所有关于在生产环境中运行Docker的话题都是围绕着将开发环境与生产环境区分开的两个关注点进行的:一是编排,二是安全。有些团队试图让开发环境和生产环境尽可能保持一致。这种方法看起来很好,但是限于开发环境这样做所需定制工具的数量又或者说模拟云服务(如AWS)的复杂度,这种方法并不实际。为了简化这本书的范畴,我们将介绍一些部署代码的用例,但判定最佳开发环境设置的实践机会将留给读者。作为基本原则之一,尽量保持生产环境和开发环境的相似性,并使用一个持续集成/持续交付(CI/CD)系统以获取最佳结果。我们所说的“生产环境”对于不同的团队,生产环境意味着不同的东西。在本书中,我们所说的生产环境是指真实客户用于运行代码的环境。这是相对于开发环境、预演环境及测试环境而言的,后者的停机时间不会被客户感知到。在生产环境中,Docker有时是用于接收公共网络流量的容器,有时则是用于处理来自队列负荷的异步的后台作业。不管哪种用途,在生产环境中运行Docker与在其他环境中运行相比,最主要的差异都是需要在其安全性与稳定性上投入较多的注意力。编写本书的动力之一是,与Docker相关的文档和博客文章中缺乏对实际生产环境与其他环境的明确区分。我们认为,80%的Docker博客文章中的建议在尝试在生产环境中运行6个月之后会被放弃(或至少修改)。为什么?因为大多数博客文章中举的都是理想化的例子,使用了最新、最好用的工具,一旦某个极端的情况变成了致命缺陷,这些工具将被遗弃(或延期),被更简单的方法所取代。这是Docker技术生态系统现状的一个反映,而非技术博客的缺陷。总的来说,生产环境很难管理。Docker简化了从开发到生产的工作流程,但同时增加了安全和编排的复杂度(更多关于编排的内容参见第4章)。为了节省时间,下面给出本书的重点综述。所有在生产环境中运行Docker的团队,都会在传统的安全最佳实践上做出一项或多项妥协。如果无法完全信任容器内运行的代码,那么就只得选用容器与虚拟机一对一的拓扑方式。对于很多团队而言,在生产环境中运行Docker的优势远远大于其带来的安全与编排问题。如果遇到工具方面的问题,请等待一到两个月,以便Docker社区对其进行修复,不要浪费时间去修补其他人的工具。保持Docker设置最小化。让一切自动化。最后,对成熟的编排工具(如Meo、Kuerate等)的需求远比想象的要少得多。功能内置与组合工具Docker社区一个常见的口头禅是“电池内置但可移除”,指的是将很多功能捆绑在一起的单体二进制文件,这有别于传统Uix哲学下相对较小、功能单一、管道化的二进制文件。这种单体式的做法是由两个主要因素决定的:(1)使Docker易于开箱即用;(2)Golag缺少动态链接。Docker及多数相关工具都是用Google的Go编程语言编写的,该语言可以简化高并发代码的编写与部署。虽然Go是一门出色的编程语言,但用它来构建的Docker生态系统中也因此迟迟无法实现一个可插拔的架构,在这种架构中可以很容易用替代品对工具进行更换。如果读者有Uix系统背景,最好是编译自己的精简版Docker守护进程,以符合生产环境的需求。如果读者有开发背景,预计到2015[1]年下半年,Docker插件将成为现实。在此期间,估计Docker生态系统中的工具将会出现明显的重叠现象,某些情况下甚至是相互排斥的。换句话说,要让Docker运行于生产环境中,用户的一半工作将是决定哪些工具对自己的技术栈最有意义。与DevO所有事情一样,先从最简单的解决方案入手,然后在必要时增加其复杂性。2015年5月,Docker公司发布了Comoe、Machie及Swarm,与Docker生态系统内的同类工具进行竞争。所有这些工具都是可选的,请根据实际情况对其进行评估,而不要认为Docker公司提供的工具就一定是最佳解决方案。探索Docker生态系统时的另一项关键建议是:评估每个开源工具的资金来源及其商业目标。目前,Docker公司和CoreOS经常发布工具,以争夺关注度和市场份额。一个新工具发布后,最好等上几个月,看看社区的反应,不要因为它看起来很酷就切换到最新、最好用的工具上。哪些东西不要Docker化最后一个关键点是,不要期望能在Docker容器中运行所有东西。Heroku风格的“十二要素”(12factor)应用是最容易Docker化的,因为它们不维护状态。在理想的微服务环境中,容器能在几毫秒内启动、停止而不影响集群的健康或应用程序的状态。类似CluterHQ这样的创业公司正着手实现Docker化数据库和有状态的应用程序,但眼下,由于编排和性能方面的原因,可能需要继续直接在虚拟机或裸机上运行数据库。[2]Docker还不适用于任何需要动态调整CPU和内存要求的应用。允许动态调整的代码已经完成,但尚不清楚何时才能在一般的生产环境中投入使用。目前,若对容器的CPU和内存的限制进行调整,需要停止并重新启动容器。另外,对网络吞吐量有高要求的应用进行最佳优化时不要使用Docker,因为Docker使用itale来完成宿主机IP到容器IP的NAT转换。通过禁用Docker的NAT来提升网络性能是可行的,但这是一个高级的使用场景,很少有团队会在生产环境中这么做。技术审稿人衷心感谢以下技术审稿人提供的早期反馈及细致的评论:MikaTurue、XavierBruhiere和FelixRae。[1]Docker1.7版中正式引入了插件系统。——译者注[2]Docker1.10版中新增的dockerudate命令可实现CPU和内存的动态调整。——译者注第1章入门建立Docker生产环境系统的首要任务,是以一个有助于想象各组件如何相互配合的方式来理解其术语。与其他快速发展的技术生态系统一样,我们可以预见,Docker野心勃勃的市场营销、不完善的文档以及过时的博客文章将造成使用者对各个工具职责理解上的混乱。我们将在本章中定义贯穿全书的术语和概念,而非提供一份统一的Docker百科全书。通常情况下,我们的定义与生态系统中的大体一致,但如果你所阅读的博客文章中使用了不同的术语也不用太过惊讶。在本章中,我们将介绍在生产环境中运行Docker的核心概念以及不涉及具体技术的容器常识。在随后的章节中,我们将讨论真实世界的生产环境用例,并详细说明其组件和供应商信息。1.1术语下面让我们来看一下本书所采用的Docker术语。1.1.1镜像与容器●镜像是指文件系统快照或tar包。●容器是指镜像的运行态。1.1.2容器与虚拟机●虚拟机持有整个操作系统和应用程序的快照。●虚拟机运行着自己的内核。●虚拟机可以运行Liux之外的其他操作系统。●容器只持有应用程序,不过应用程序的概念可以延伸到整个Liux发行版。●容器共享宿主机的内核。●容器只能运行Liux,不过在同一宿主机上运行的每个容器都可包含不同的发行版。1.1.3持续集成/持续交付在应用程序新代码提交或触发其他条件时,系统自动构建新镜像并进行部署。1.1.4宿主机管理设置/配备一台物理服务器或虚拟机以便用于运行Docker容器的过程。1.1.5编排编排(orchetratio,也称编配)这个术语在Docker生态系统中有多种含义。通常情况下,它包括调度和集群管理,不过有时也包括了宿主机管理。在本书中,我们将编排作为一个松散的总称,包括容器调度的过程、集群的管理、容器的链接(发现),以及网络流量路由。或者换句话说,编排是个控制器进程,用于决定在哪里运行容器,以及如何让集群知道可用的服务。1.1.6调度用于决定哪些容器可以以给定的资源约束(如CPU、内存和IO)运行在哪些宿主机上。1.1.7发现容器如何公开服务给集群,以及发现如何查找其他服务并与之通信的过程。举个简单的用例:一个网站应用容器发现如何连接到数据库服务。Docker文档中的发现是指将容器链接在一起,不过在生产级系统中,通常使用的是更复杂的发现机制。1.1.8配置管理配置管理过去常常指的是Docker出现之前的自动化工具,如Chef和Puet。大多数的DevO团队正在转移到Docker上,以消除这类配置管理系统的复杂度。在本书的示例中,配置管理工具只用于配备具有Docker和少量其他东西的宿主机。1.2从开发环境到生产环境本书着重于生产环境或非开发环境中的Docker,这意味着我们不会花太多的篇幅在开发环境中Docker的配置和运行上。但由于所有服务器都在运行代码,如何看待在Docker和非Docker系统中的应用程序代码还是值得简单讨论一下的。与Chef、Puet和Aile这类传统配置系统不同,Docker最好的使用方式是将应用程序代码预先打包成一个Docker镜像。镜像通常包含所有的应用程序代码、运行时的依赖以及系统的需求。而包含数据库凭证和其他敏感信息的配置文件通常在运行时添加,而非内建到镜像中。有些团队会在开发机上手工构建Docker镜像,然后推送到镜像仓库,之后再从仓库中拉取镜像到生产环境宿主机中。这是个很简单的用例。虽然行得通,但从工作流和安全角度考虑并不理想。一个更常见的生产环境示例是,使用持续集成/持续交付系统在应用程序代码或Dockerfile文件发生变更时自动构建新镜像。1.3使用Docker的多种方式过去的几年时间,科技发生了巨大变化,从物理服务器到虚拟服务器,再到拥有PaaS环境的云计算。不论是否采用了全新架构,Docker镜像都可以在当前环境中很容易地被使用。要使用Docker,并不需要立即从单体应用程序迁移到面向服务架构。有很多用例允许在不同层次上集成Docker。Docker常用于以下场景。●使用以镜像为基础的部署方式取代类似Caitrao的代码部署系统。●安全地在同一台服务器中运行遗留应用和新应用。●使用一个工具链循序渐进地迁移到面向服务架构。●管理云端或裸机上的水平扩展性和弹性。●确保从开发环境到预演环境到生产环境跨环境的一致性。●简化开发人员的机器设置和一致性。将应用的后台程序迁移到Docker集群中,同时保持网页服务器和数据库服务器不变是开始使用Docker的常见示例。另一示例是将应用的部分RESTAPI迁移到Docker中运行,前端使用Ngix代理在遗留服务和Docker集群之间路由通信。通过使用此类技术,团队可以渐进式地从单体应用无缝地迁移到面向服务架构。如今的应用程序往往需要几十个第三方库,用于加速功能开发或连接第三方SaaS和数据库服务。每个库都可能产生ug,或是让用户陷入版本依赖的泥沼。再加上库的频繁更改,要在基础设施上完成工作代码的持续部署而不引起失败,压力巨大。Docker可贵的镜像思想使得技术团队在部署工作代码时,不论是单体架构、面向服务或是二者的混合,由于代码及其依赖项捆绑在同一个镜像中,所使用的方式对每次部署都是可测试、可重复、文档化且一致的。一旦一个镜像构建完毕,就可以部署到任意多个运行着Docker守护进程的服务器上。另外一个常见的Docker用例是跨环境部署一个单一容器,其典型的代码路径是从开发环境到预演环境再到生产环境。容器为整个代码路径提供了一个一致的、可测试的环境。作为一个开发人员,Docker模型允许在其个人电脑上调试与生产环境完全一致的代码。开发人员可以很容易地下载、运行和调试有问题的生产环境镜像,且无需事先对本地开发环境进行修改。1.4可预期的情况在生产环境中运行Docker容器困难不小,但还是能实现的。每天都有越来越多公司开始在生产环境中运行Docker。如同所有的基础设施一样,我们建议以小规模入手,然后渐进式地完成迁移。为什么Docker在生产环境如此困难对生产环境有很多要求:安全可靠的部署、健康检查、最小或零停机时间、从失败中恢复的能力(回滚)、一个集中存储日志的方式、一种分析或调试应用的方式,以及一种聚合监控参数的方式。类似Docker这样的新技术虽然使用起来非常有趣,但还需要时间来完善。Docker在可移植性、一致性以及打包具有众多依赖的服务这些方面非常有优势。多数团队会因为以下一个或多个痛点而坚持使用Docker。●一个应用的不同部分使用大量不同的依赖。●支持使用旧依赖的遗留应用程序。●开发团队与DevO之间的工作流问题。本书中我们所采访的团队,有一个共同的警示:切勿尝试在一个组织内让采用Docker这事一蹴而就。即便运维团队已经为采用Docker做好了充分的准备,也请记住,过渡到Docker通常意味着将管理依赖的重任推给了开发人员。虽然很多开发人员都渴求这种自主权,以便加快迭代,但并非每位开发人员都有能力或兴趣将其列入自己的责任范围。为了能有一个良好的Docker工作流,还是需要花些时间来转变企业文化。在第2章中,我们将阐述Docker的技术栈。第2章技术栈生产环境的Docker设置包括了一些基本的架构组件,这些组件对运行容器化的及传统的服务器集群来说是通用的。在很多方面,可以简单地认为构建和运行容器的方式与当前构建和运行虚拟机的方式是一样的,只是使用了一套新的工具和技术。(1)构建并保存镜像快照。(2)将镜像上传到仓库中。(3)下载镜像到某台宿主机中。(4)以容器方式运行镜像。(5)将容器连接到其他服务上。(6)路由流量到容器中。(7)将容器日志发送到指定位置。(8)监控容器。与虚拟机不同的是,容器通过将宿主机(裸机或虚拟机)与应用程序服务隔离,从而提供了更高的灵活性。这为构建和配备流程带来了直接的改善,但由于额外的容器嵌入层,会增加一些开销。典型的Docker技术栈将包括用于解决以下关注点的组件:●构建系统;●镜像仓库;●宿主机管理;●配置管理;●部署;●编排;●日志;●监控。2.1构建系统●如何构建镜像,并将其推送到镜像仓库中?●Dockerfile位于何处?构建Docker镜像通常有以下两种方式。(1)在开发人员电脑上手工构建,然后推送到到仓库中。(2)使用CI/CD系统在代码提交时自动构建。理想的Docker生产环境将使用类似Jeki或Codehi这样的CI/CD(配置集成/持续部署)系统,在代码提交时自动构建镜像。一旦容器构建完毕,它将被发送到镜像仓库中,自动化测试系统就可以从中下载并运行该镜像。2.2镜像仓库●Docker镜像保存在哪里?当前的Docker镜像仓库可靠性比较差,但是每个月都在改善。Docker官方的镜像仓库中心是众所周知的不可靠,需要额外的重试和故障保护措施。多数团队一般会在自己的基础设施上运行私有的镜像仓库,以减少网络传输成本和延迟。2.3宿主机管理●如何配备宿主机?●如何升级宿主机?由于Docker镜像包含了应用及其依赖,宿主机管理系统通常只需要添加新服务器,配置访问权限和防火墙,并安装Docker守护进程即可。类似亚马逊的EC2CotaierService这类服务将消除对传统宿主机管理的依赖。2.4配置管理●如何定义容器的集群?●如何处理宿主机和容器运行时的配置?●如何管理密钥和机密信息?一个基本规则是:尽量避免使用传统的配置管理系统。其增加的复杂性往往会造成故障。Aile、SaltStack、Chef或Puet这类工具仅用于配备带有Docker守护进程的宿主机。尽可能试着摆脱对旧的配置管理系统的依赖,并使用本书所述的发现和集群技术转移到自我配置的容器上。2.5部署●如何将容器放置在宿主机上?镜像部署有以下两种基本方法。(1)推送——部署或编排系统将镜像推送给相关宿主机。(2)拉取——事先或按需从镜像仓库拉取镜像。2.6编排●如何将容器组织成集群?●在哪些服务器上运行容器?●如何调度服务器资源?●如何运行容器?●如何将流量路由给容器?●如何让容器公开和发现服务?“编排=强力胶带”。至少多数情况下可以这么认为。市面上有很多处于早期阶段的全功能容器编排系统,如DockerSwarm、Kuerete、Meo和Fly。但对大多数团队而言,这些系统通常过于强大,增加了在生产环境中出现问题时调试的复杂度。决定使用哪个工具来完成编排常常是设置和运行Docker中最艰难的部分。在第3章中,我们将讲述Peerace所采取的一种构建Docker系统的简约方法。第3章示例:极简环境一说起生产环境中容器的使用,大家的第一反应是那些在同样量级的宿主机上部署成千上万容器的大型公司。但实际上恰恰相反,要发挥容器的作用,并不需要构建如此庞大的系统。小规模的团队反而能从容器中获得最大收益,因为容器使构建和部署服务不仅变得简单,而且可重复、可扩展。本章描述的就是一家名为PeerSace的小规模公司构建系统时采取的一种极简方式。这种极简方式使他们能在短时间内使用有限的资源开辟一个新市场,并自始至终保持着极高的开发速度。PeerSace构建系统时的目标是既要易于开发,又要在生产环境中足够稳定。这两个目标通常是相互矛盾的,因为高速开发引起的大量变化反过来会对系统的构建和配置产生很大影响。任何一个有经验的系统管理员都知道,这样的变化率必然导致不稳定性。Docker看起来非常适合用在刚起步的时候,因为它既对开发人员友好,又支持以敏捷的方式构建和运维系统。Docker简化了开发和系统配置的某些方面,但有时却过于简单化了。在易于开发和稳健运维之间取得平衡不是件容易的事。3.1保持各部分的简单PeerSace实现开发速度和稳定的生产环境这两个目标的方法之一是拥抱简单。这里所说的简单是指系统的每个部分——容器——有且只有一个目标。这个目标就是:相同的过程,如日志收集,在任何地方都以相同的方式完成,而各部分连接的方法也是明确、静态地定义在配置文件中的。在这种简单的系统中,开发人员可以同步地、独立地构建系统的不同部分,并确信构建的容器可组装在一起。另外,在生产环境出现问题时,简单性也让问题的排查与解决变得非常简单。要长期保持系统的简单,需要大量的思考、折中和坚持,但最终这种简单将物有所值。PeerSace的系统由20个零散的微服务组成,其中有部分使用了MogoDB数据库和/或ElaticSearch搜索引擎。该系统设计遵循下列指导原则。(1)倾向无状态服务。这可能是简化PeerSace生产环境时最大的决策:大部分服务都是无状态的。除了用于处理当前进行中的请求的临时信息,无状态服务不需要保持任何需要持久化的数据。无状态服务的优势在于可以非常容易地对他们进行销毁、重启、复制及伸缩,所有这一切都无需考虑任何数据处理方面的逻辑。并且,无状态服务更易于编写。(2)倾向静态配置。所有宿主机和服务的配置都是静态的:一旦给服务器推送一项配置,该配置就会一直生效,直至显式地推送来新配置。与之相对的是那些动态配置的系统,其系统的实际配置是实时生成的,并会根据不同因素(如可用宿主机和即将到达的负载)进行自主修改。尽管动态系统的伸缩性更好,并且具有一些有趣的属性,如在出现某些故障时自动恢复等,但静态配置更易于理解和排错。(3)倾向静态的网络布局。如果在一台宿主机中找到一项服务,除非新配置被确定并提交,否则总能在那台宿主机中找到该服务。(4)区别对待无状态和有状态服务。尽管PeerSace的多数服务是无状态的,他们还是使用MogoDB和ElaticSearch来持久化数据。这两种类型的服务在本质上是非常不同的,应该区别处理。例如,将一个无状态服务从一台宿主机移动到另一台上非常简单,只需要启动新服务,然后停止旧服务即可。但要对一个数据库进行移动,数据也要跟着移动。移动数据可能会花费很长时间,要求在迁移过程中停止服务,或通过设备方法进行在线迁移。在开发领域,通常将无状态服务比做“牲口”,它们没有名字,很容易被代替和伸缩,而将有状态服务比做“宠物”,它们是唯一的、具名的,需要维护,并且难以伸缩。幸运的是,PeerSace正如一个农场一样,其“牲口”数量要远远多于“宠物”。以上这些设计原则是简化PeerSace系统的基础。将有状态服务与无状态服务分离,可以对本质上完全不同的服务进行区别处理(如图3-1所示),因此可以对每一种情况的处理方式进行优化和尽可能地简化。使用静态配置运行无状态服务使得操作系统的流程变得非常简单:多数情况下流程被简化成文件复制和容器重启,完全不需要考虑其他因素,如对第三方系统的依赖。图3-1上述设计准则能否产生一个简单的系统,完全取决于系统操作是否同样简单。3.2保持流程的简单在设计业务流程时,PeerSace基于观察做出了如下假定:在他们的基础设施中离硬件越近的层变更越少,而越接近终端用户的层变更越频繁(如图3-2所示)。图3-2根据这一观察,生产环境中的服务器数量很少变更,通常是由于缩放问题或硬件故障。而这些服务器的配置变更频次可能更高一些,通常是由于性能补丁、系统错误修复或安全问题等原因。在这些服务器上运行的服务数量和类别变更更为频繁。通常是指移动服务、添加新类型服务或对数据进行操作。这个层级上的其他修改可能与要求重新配置或变更第三方服务的新版本部署有关。不过,这类变更仍然不是很常见。在这样的基础设施中,多数的变更与多个服务的新版本推送有关。每天,PeerSace都会执行很多次新版服务的部署。多数情况下,新版本的推送只是简单地将现有版本替换成运行新镜像的新版本。有时也会使用相同镜像,但对配置参数进行变更。PeerSace的流程建立是为了让最频繁的变更最容易也最简单进行,即便这样会造成基础设施更难以变更(实际上并未发生)。3.3系统细节PeerSace运行着3个类生产环境集群:集成环境、预演环境与生产环境。每个集群包含了相同数量的服务,并使用相同的方式进行配置,唯一不同的是它们的原始性能(CPU、内存等)。开发人员同样会在自己的电脑上运行全部或部分集群。每个集群由以下几个部分组成:●几台运行着CetOS7的Docker宿主机,使用ytemd作为系统管理程序;●一台MogoDB服务器或一个复制集合;●一台ElaticSearch服务器或一个集群。MogoDB和/或ElaticSearch服务器可能在某些环境中是Docker化的,而在其他环境中不是Docker化的(如图3-3所示)。它们也会在多个环境中共享。在生产环境中,出于运维和性能的原因,这些数据服务是不做Docker化的。图3-3每个Docker宿主机运行着一个服务的静态集合,所有这些服务都会遵循如下模式进行构建:●所有配置都通过环境变量进行设置,包括其他服务的地址(和端口);●不将数据写入磁盘;●将日志发送到标准输出(tdout)中;●生命周期由ytemd管理,并定义在一个ytemd单元文件中。利用ytemd所有服务都由ytemd管理。ytemd是一个借鉴了OSXlauchd的服务管理程序,此外,ytemd使用普通数据文件命名单元来定义每个服务的生命周期(如图3-4所示),这与其他使用hell脚本完成这类事务的传统管理程序完全不同。图3-4PeerSace的服务只将Docker进程当作唯一的运行时的依赖。ytemd的依赖管理只用来确保Docker处于运行状态,但不确保其拥有的服务以正确顺序启动。服务构建时要求它们可以以任何顺序启动。所有服务都由以下部分组成(如图3-5所示):●一个容器镜像;●一个ytemd单元文件;●一个该容器专用的环境变量文件;●一组用于全局配置参数的共享环境变量文件。图3-5所有单元都遵循相同的结构。在服务启动之前,一系列包含环境变量的文件将被加载:EvirometFile=/ur/etc/ervice-locatio.evEvirometFile=/ur/etc/ervice-cofig.evEvirometFile=/ur/etc/cluter.evEvirometFile=/ur/etc/ecret.evEvirometFile=/ur/etc/%.ev这确保了每个服务会加载一系列通用环境文件(ervice-locatio.ev、ervice-cofig.ev、cluter.ev及ecret.ev),外加一个专用于该服务的文件:%.ev,此处的%在运行时将被替换成该单元的全称。例如,一个名为docker-earch的服务单元将被替换成docker-earch.ervice。接下来的条目是确保在启动新容器前旧容器被正确删除的:ExecStartPre=-/i/dockerkill%ExecStartPre=-/i/dockerrm-f%通过使用%,将容器命名为单元的全称。使用变量进行容器命名能让单元文件更通用并且可移植。在docker程序路径之前使用“-”可防止单元在命令失败时中止启动。这里需要忽略潜在的错误,因为如果此前不存在该容器,这些命令将执行失败,而这种情况又是合法的。单元中主要的条目是ExecStart,它将告之ytemd如何启动该容器。这里内容较多,但我们只关注一下其最重要的部分:ExecStart=/i/docker\ru\-"${APP_PORT}:${APP_PORT}"\-e"APP_PORT=${APP_PORT}"\-e"SERVICE_C_HOST=${SERVICE_C_HOST}"\-e"SERVICE_D_HOST=${SERIVCE_D_HOST}"\-e"SERVICE_M_HOST=${SERVICE_M_HOST}"\--add-hotdocker01:${DOCKER01_IP}\--add-hotdocker02:${DOCKER02_IP}\--volume/ur/local/docker-data/%/d:/data/data\--volume/ur/local/docker-data/%/log:/data/log\--ame%\${IMAGE_NAME}:${IMAGE_TAG}(1)使用EvirometFile加载的环境变量来配置容器(如通过-公开的端口)。(2)将集群中的其他宿主机地址添加到容器的/etc/hot文件中(--add-hot)。(3)映射用于日志和数据的数据卷。这主要是作为一个“蜜罐”[1](hoeyot),以便检查这些目录并确保无人对其进行写入。(4)镜像自身(名称和版本)来自于从/ur/etc/%.ev中加载的环境变量,在本示例中它将映射到/ur/etc/docker-earch.ervice.ev中。最后,是一些定义如何停止容器及其他生命周期要素的条目:ExecSto=-/i/dockerto%Retart=o-failureRetartSec=1TimeoutStartSec=120TimeoutStoSec=303.4集群范围的配置、通用配置及本地配置PeerSace将集群配置分成两种类型文件:环境变量文件和ytemd单元文件。上面已经讲述了单元文件及其加载环境变量文件的方式,接下来看一下环境文件。将环境变量分解到不同文件中的主要原因在于,这些文件在跨集群时是否需要修改以及如何修改,不过也有其他操作层面的原因。●ervice-locatio.ev:集群中所有服务的宿主机名。这个文件在不同集群里通常是一样,不过也有例外。●ervice-cofig.ev:与服务自身相关的配置。如果不同集群运行的是服务的兼容性版本,这个文件应该是一样的。●ecret.ev:密钥信息。因其内容关系,这个文件被处理的方法与其他文件不同,而且在不同集群上也有差异。●cluter.ev:包括了集群间的所有不同之处,如所使用的数据库前缀、是测试还是生产环境、外部地址等。这个文件中最重要的信息是属于该集群的所有宿主机的IP地址。下面是某些示例集群中的文件。这是cluter.ev文件:CLUSTER_ID=alhaCLUSTER_TYPE="tet"DOCKER01_IP=x.x.x.226DOCKER02_IP=x.x.x.144EXTERNAL_ADDRESS=htt://omethigorother.comLOG_STORE_HOST=x.x.x.201LOG_STORE_PORT=9200MONGODB_PREFIX=alhaMONGODB_HOST_01=x.x.x.177MONGODB_HOST_02=x.x.x.299MONGODB_REPLICA_SET_ID=r001这是ervice-locatio.ev文件:SERVICE_A_HOST=docker01SERVICE_B_HOST=docker03CLIENTLOG_HOST=docker02SERIVCE_D_HOST=docker01...SERVICE_Y_HOST=docker03SERVICE_Z_HOST=docker01每个ytemd单元都包含集群中其他宿主机的引用,而这些引用来自于环境变量。包含服务宿主机名的变量会被装配到Docker命令中,以便容器进程使用。这是通过-e参数实现的,如-e"SERVICE_D_HOST=${SERIVCE_D_HOST}"。Docker宿主机的IP地址也同样通过--add-hotdocker01:${DOCKER01_IP}注入到容器中。这样,只需要修改这两个文件并且保持单元文件的完好无损,就可以将容器扩散到不同数量的宿主机中。3.5部署服务容器级别或配置级别的修改通过3个步骤完成:第1步,在配置仓库(Git)上做修改;第2步,将配置文件复制到宿主机的预演区域(h);第3步,运行宿主机上的一个脚本来逐一部署每个服务,使得配置修改生效。这种方法提供了版本化配置,一次只推送一项相关配置,以及让推送配置生效的一种灵活方式。如果需要针对一组服务进行修改,首先在Git上做修改并提交。然后运行脚本,将这个配置推送到所有宿主机的预演区域。一旦配置被推送过去,在每台宿主机上运行一个脚本来部署或重部署该宿主机上的所有容器集合。这个脚本会对在列的所有服务执行如下命令。(1)将配置文件从预演区域复制到其最终位置:●ytemd单元文件;●共享的配置文件;●当前服务的配置文件;●密钥文件(解密后的)。(2)需要的话下载镜像文件(镜像定义在服务自身的配置文件中)。(3)重载ytemd的配置,以便读取新的单元文件。(4)重启容器对应的ytemd单元。PeerSace具有两个部署工作流,理解这一点有助于阐述其部署流程:一个用于开发环境,另一个用于生产环境,而后者是前者的一个超集。在开发过程中,他们会通过以下步骤将临时构建联署到集成服务器中。(1)使用最新代码库创建一个新的容器镜像。(2)将镜像推送到镜像仓库中。(3)在运行该镜像的容器宿主机上运行部署脚本。开发环境的ytemd单元会追踪镜像的最新版本,所以只要配置不做修改,那我们只需推送镜像并重新部署即可。类生产环境的服务器(生产环境和预演环境)与开发环境配置方式大体相同,主要区别在于生产环境中的容器镜像都打上了版本标签,而非latet。部署发布镜像到类生产环境容器的流程如下。(1)在仓库中为容器镜像运行发布脚本。该脚本将为Git仓库打上新版本标签,然后使用这个版本号构建并推送镜像。(2)更新每个服务环境变量文件以引用新镜像标签。(3)将新的配置推送到各宿主机中。(4)在运行该镜像的容器宿主机上运行部署脚本。他们通常会批次地将服务从开发环境转移到生产环境(一般是两周一次)。在推送发行版到生产环境时,开发环境中用于该发行版的配置文件会被复制到生产目录中。多数文件可以完全照搬,因为它们是从集群的具体细节(IP地址、宿主机数量等)抽象出来的,不过cluter.ev和ecret.ev文件在各个集群中是不一样的,在发行时也对其进行更新。一般情况下,会一次性推送所有新版本服务。3.6支撑服务PeerSace使用了一组服务来支撑自己的服务。这些服务包括以下两个。●日志聚合:fluetd+kiaa以及docker-ge的组合。docker-ge可根据宿主机中运行的容器创建和重创建一个配置文件。docker-ge为每个运行中的容器生成一个fluetd条目,用于发送日志给kiaa。这个服务运行良好,且易于调试。●监控:Datadog——一个SaaS监控服务。Datadog代理在容器中运行,用于监控各项性能指标、API使用情况和业务事件。Datadog为标签提供了丰富的支持,通过fluetd可以使用多种方式对单一事件进行标记。数据收集起来后(如跨集群的相同服务、所有Docker服务、使用某个发行版的所有API端点等),可以利用丰富的标签对数据进行多种方式的切割。3.7讨论在系统中,所有宿主机和服务的配置都非常明确,开发人员很容易理解系统的配置,并能不受干扰地工作于系统的不同部分上。每位开发人员都可以在任何时候对集成集群进行推送,并且推送到生产环境所需的协调也很少。由于每个集群的配置都保存在Git上,很容易追踪配置的变化,并在出现配置问题时对集群进行排错。因为配置推送的方式,一旦新配置设置妥当,该配置将保持不变。静态配置带来的是极大的稳定性。另外,服务编写的方式,如通过环境变量进行配置、日志写入控制台、无状态等,使得它们之后可原封不动地被Meo或Kuerete这类集群管理工具使用。当然,要得到这些好处是有代价的。一个最明显的缺点是配置有些繁琐、重复并且易出错。我们可以通过大量的自动化的工具来生成这些配置文件。修改全局配置要求重启多个容器。目前是由开发人员来重启正确的容器。在生产环境中,如果推送的修改很多,通常会执行滚动重启,但这并不是一个很好的解决方法。这绝对是一个薄弱环节,但到目前为止,还是可控的。3.8未来PeerSace正在考虑几个系统扩展的方式。其中之一是通过反向代理实现零停机时间部署。这将使得PeerSace有能力对每个服务进行水平扩展。另外一个方向是从集群的更高层级描述中生成所有的配置文件。这种方法能在配置发生改变后计算哪些容器需要重启。在考虑这些未来的方向时,PeerSace也在权衡使用Meo或Kuerete的可能性,因为他们认为,增加部署脚本的任何复杂度势必造成对简单模式的过度拉伸。3.9小结尽管本章讲解了一个极其简单的Docker使用方式,但我们仍希望它能成为“Docker思想”的基石。不论是使用极简方式还是集群管理系统,读者都能利用这种方式在阅读本书其他部分时获益。当然,使用Docker还有很多其他方式,第4章将讲述RelateIQ使用Docker运行了一年多的一个真实的We服务器生产环境。[1]用于隐藏宿主机的真实路径。——译者注第4章示例:We环境我们所知的大多数公司都曾以一个很低的容器和宿主机比例(1~2个容器对应1台宿主机)成功地使用过Docker。也就是说,要在生产环境中成功运行Docker,并不是必须要运行AacheMeo或[1]Kuerate。在本示例中,将对RelateIQ公司使用Docker运行了一年多的一个真实We服务器生产环境做详细的说明。这个环境在运行Uutu的标准亚马逊云服务(AWS)实例上,使用Docker支撑其CRMWe应用。当初使用Docker的原因有三:一是Docker能快速生成和销毁容器,从而为客户提供零停机时间部署;二是因为Docker为不同We版本提供依赖隔离;三是Docker支持即时回滚。图4-1所示为该环境的高层次示图。图4-1相信吗?这个We环境提供了如下功能:稳定的零停机时间部署、回滚、集中式日志、监控及分析JVM的一种方式。所有这些都是通过ah脚本编排Docker镜像获得的。图4-2所示为主机的详细情况。图4-2这台We服务器运行于单台AWS服务器上,并通过Docker运行着4个容器。部分容器被链接在一起,以便与Docker网桥上的其他容器进行通信。它给宿主机公开了多个端口,用于为性能分析提供HTTP服务和JVM监控。它使用了亚马逊ELB负载均衡器(健康检查在其上进行)。所有容器都将它们的日志保存在宿主机上,这样现有的日志方案(SumoLogic)依旧适用,同时有一个简单的ah编排脚本用于部署和设置新版本We服务。为了便于理解很多公司在生产环境中运行Docker时会遇到的问题,我们来看一些具体细节。4.1编排编排归根到底就是做两件事:一是获取已安装Docker的服务器,并且使之准备好运行容器的服务器;二是在服务器上启动并运行容器。4.1.1让服务器上的Docker进入准备运行容器的状态该服务器使用标准的基本UutuAMI(亚马逊机器镜像)在AWS上部署,并通过Chef的标准配置管理系统对宿主机进行设置。其设置过程与当下的多数环境完全相同。服务器启动之后,Chef就会运行并设置h用户、h密钥,然后通过其包安装器安装基础包(如iotat),安装并配置监控代理(本例中是Datadog),集合一些临时磁盘空间用于数据或日志存储,安装并配置日志代理(SumoLogic),安装最新版Docker,最后创建ah设置脚本,并配置一个cro任务来运行它。Chef在服务器上运行之后,宿主机就准备好在其上运行机器所需的任何容器了。Chef还配置了监控和日志软件,用于未来的调试。这个环境可以运行任何类型的容器服务,与当下运行的大多数服务器环境,甚至是物理环境也一般无二。现在,Docker已经安装完毕,宿主机也准备好核心操作工具,下面就可以让宿主机上的容器开始运行试读结束[说明:试读内容隐藏了图片]点击下载...

    2022-04-02 生产环境 虚拟机 运行 docker 生产环境虚拟机用动态内存还是固定内存

  • 全球视野与地方凝视:区域生产视角下的佛山历史文化名城发展与重构(txt+pdf+epub+mobi电子书下载)|百度网盘下载

    作者:杨俭波著出版社:社会科学文献出版社格式:AZW3,DOCX,EPUB,MOBI,PDF,TXT全球视野与地方凝视:区域生产视角下的佛山历史文化名城发展与重构试读:第一章导论一城市化与城市发展问题自19世纪资本主义工业化及主要资本主义国家掀起城市化浪潮以来,到20世纪前半叶,欧美各主要国家城市流入人口都超过50%,实现城市化。20世纪后期,技术革命及全球产业经济的调整、转型和重新布局,进一步推动全球化和城市化,全球城市进入新的发展阶段——体现为城市化从发达国家向发展中国家和第三世界国家蔓延发展,世界进入普遍城市化时期。某些地方,甚至出现“逆城市化”“过度城市化”等现象;“快速城市化”和“再城市化”等产生相应的城市和社会发展问题。(1)城市空间正义问题凸显。城市化过程即城市空间的生产过程,主要围绕外部空间拓展和内部空间更新两个维度展开。城市空间生产过程除了由本土工业化进程以及现代市场经济推动之外,也受到资本全球化及其转移、集聚所推动,在这一进程中,资本和权力主导着空间生产的逻辑和路径,使旧城改造和新城建设中出现“以资本为核心,以利润最大化为指向”的城市发展模式,这种以权力与资本共谋,制度公正缺失的空间生产模式,造成对公众空间权益的多重损害。(2)经济重组诱发城市重构。在全球经济重组过程中,世界城市体[1]系和城市内部空间均发生重大的重组和转型,旧的制造中心随着全球产业转移引起的第二产业衰退而逐步衰退,人口衰减、就业不稳,失业增加等问题显现。而在全球生产和贸易网络中承担重要节点功能的城市,经济重组带来产业结构升级、转型,城市内部社会结构极化加剧等现象。因此,针对旧制造业中心城市的后工业化转型和全球产业经济的服务化与创意文化转向,实现对衰败旧工业城市经济复兴,以及通过创造更多就业机会,改善居住环境,解决内城衰败以提高大都市中心区经济活力与多样性的一系列城市策略,成为西方国家城市更新的主要内容。(3)城市地方文化和记忆面临丧失和破坏。全球化导致制造业从发达国家向发展中国家转移,在此背景下,欧美城市普遍面临内城衰败以及城市经济结构性调整,各国据此纷纷推出对旧城中心区的更新计划。一方面,以全球化和现代化为导向的旧城更新,对城市社区和中低收入阶层生存空间产生日益加剧的压力,使以历史积淀和传统街市生活为特征的旧城中心区空间形态趋向解体;另一方面,随着旧城改造力度逐年加大,城市地方历史文化面临更新危机。同时,对城市历史和文化资源尊重、保护不够,也产生“建设性破坏”现象,历史城市和城市历史文化街区逐渐失去其特有的文化脉络、历史记忆和地方传承,城市地方历史与文化之根,成为城市现代化、全球化和城市产业调整升级的“殉葬品”。那些具有鲜明地方特征和地域特色的文化渐趋衰微,“全球范式、现代范式和国际化范式”粗暴地取代了传统个性风貌,城市更新成为少数人攫取经济利益或政绩的机会,本该受保护的建筑遭到破坏,城市文脉被切断,特有风貌也在逐渐消失。就中国城市化和城市更新情况来看,20世纪90年代以来,在加速推进工业化以及深化改革、扩大开放的过程中,中国城市化进程明显加快,快速发展的城市化,在拉大城乡差距的同时,也促进了城市之间的竞争。城市为发展向资本妥协,特别是向强大量能的跨国资本屈服,全球化、现代化和城市化成为中国区域发展的共同选择。同时,由于历史原因,中国城市旧区建筑破旧,基础设施超负荷,土地利用效率低,城市亟待更新。而不断提升的城市经济发展诉求、全球化憧憬、产业转型和结构调整的现实压力等,也对城市旧区改造提出更新的要求。然而资本、权力的复杂作用机制,导致历史文化名城在进行城市更新改造时,历史保护、文化保存、居民利益、社区传统等受到破坏和毁弃,城市更新和改造在塑造新景观、构造新地景、造就新居民的同时,也形成了多种割裂和伤害:历史和现代、地方和全球、原居民和新移民、旧社区和新小区……大规模旧城改造和拆迁,不但引发了历史文化遗产保护问题,也引起开发商和原住民之间频繁的冲突,极端的案例如各地多有报道的拆迁冲突和流血事件等。另外,城市更新和旧城改造,正逐步改变人们传统的消费观念,新的消费文化[2]和消费空间正在成为城市更新和空间生产的手段和方式。这些城市化和城市更新表现出的问题,值得深思,如城市更新和改造的目标导向为何?路径和策略是什么?如何合理协调多主体利益?如何合理均衡传统与现代、历史与当下、全球和地方、宏大和微观的关系?城市的更新发展究竟应基于何种视野和标准来审视与权衡?二我国历史文化名城发展及其存在的问题1982年,根据北京大学侯仁之先生、建设部郑孝燮先生和故宫博物院单士元先生等人的提议,中国国家历史文化名城保护体系启动。其设立目的,在于保护那些曾经是古代政治、经济、文化中心或近代革命运动和重大历史事件发生地的重要城市及其文物古迹免受破坏。根据《文物保护法》,“历史文化名城”是指“保存文物特别丰[1]富,具有重大历史文化价值和革命意义的城市”。从行政区划上看,历史文化名城并非一定是“市”也可能是“县”或“区”。为进一步规范和确立我国历史文化名城保护体系,中国先后颁布《城乡规划法》《历史文化名城保护规划规范》《历史文化名城名镇名村保护条例》等法律法规,对历史文化名城、名镇和名村的申报、审批、管理等进行规定和指导。迄今为止,我国于1982年、1986年和1994年先后公布了三批国家历史文化名城99座,自2001年至2014年,增补历史文化名城27座,全国共计历史文化名城125座(琼山和海口合计)。自中国国家历史文化名城保护体系建立以来,对促进历史城市的文化保护、文物保存、历史建筑、城市遗产和景观存续发挥了重大作用。尽管国家历史文化名城在设立宗旨上,经历了从最初的“单保护”(即主要侧重于对单体文物和实体建筑、建筑群的保存保护),转向到“多保护”(即更加重视对历史文化城市的整体环境、风貌人文特征、城市微观社区地方历史及记忆等的综合保护)。在这个转变过程中,由于各种复杂原因(主要还是经济利益指向高于文化保护的思想作祟),使历史文化名城在面对保护、存续、发展、更新关系时,出现对历史文化名城需要保护的元素进行不同程度的破坏和毁坏。尤其是20世纪90年代以来,随着中国经济加速前行,全球化、区域化和城市化风靡全国,城市产业结构也在新一轮国际分工合作机制下,面临着转型、升级和结构调整的客观需要。城市内部空间在新的城市发展目标和诉求面前,存在空间、结构、存量和数量等多方位的短缺和不足,亟须进行因应城市现代化、全球化和转型升级为目标指向的发展更新。另外,中国现行以经济发展指标为侧重的政府能力考核体系,要求各级城市政府将最大的精力和能力投入城市地方经济的发展和促进,城市政府为了尽可能实现城市经济的增长,实现在竞争者中的“脱颖而出”,必然主动或被迫地向资本靠拢甚至“谄媚”,资本成为主导历史文化名城旧区更新和发展的主要力量之一。随着资本与权力的授意和合谋,历史文化名城的城市更新和改造在快速实现发展目标的同时,也产生了较多的理论和现实问题,如历史文化名城进行城市更新改造的合理限度如何?如何合理保持和维护其历史性、文化特色和地方记忆,标准是什么?改造行动应遵循何种准则和规范,由谁制定,如何导向?历史文化名城的更新和一般城市的改造有无技术要求、改造思路、行动方法等方面的区别?对历史文化名城历史元素、文化记忆等的保护和保存,何为重点,如何衔接?如何合理确保城市“人”的正当权益?上述问题,是在当下城市发展日新月异的状态下,历史城市、城市内部历史文化街区保护与改造等需要面对并认真思考的问题。对理论研究者来说,上述问题的厘清和深入研究,对研究思考历史文化名城的更新改造理论实践,具有显著的理论、实践意义。三作为历史文化名城的佛山市老城区发展的问题作为中国第三批公布的国家历史文化名城(1994年1月4日公布,共37座)之一的佛山市,其“得名于晋、肇迹于唐”,明代中后期以来,随着海禁的开放以及澳门租借开埠,佛山以其便捷的内河交通网络,在珠江流域、两广、福建乃至江西、两湖及云贵地区构筑起庞大的内河交通运输网络。佛山由此步入繁荣时期,至清乾隆朝前后而至鼎盛,成为“全国四大聚”并称“四大名镇之首”,其城镇人口规模一度超越广州,时人语佛山与广州为“省佛”。道光以后,随着鸦片战争的爆发,中国割让香港,“一口通商”改为“五口通商”,广州独占外贸港口的地位被打破,佛山与广州长期形成的“前店后[2]厂”城镇发展模式受到巨大冲击,城镇规模逐渐萎缩,至咸丰四年(1854年)陈开、李文茂起义,使佛山城镇发展进入谷底。红巾军起义失败后,佛山与红巾军有关联的行业几遭毁灭,城镇规模也萎缩至极,其大致保持在现今佛山老城核心区域——汾江河与升平路的“T”形区域一带。佛山珠江流域首位度城镇地位,随着香港开埠、五口通商、西方列强先进的生产方式、现代机器化交通运输和商品生产而彻底丧失。此种局面持续发展至民国陈济棠督粤期间,在此期间,由于国际相对稳定的政治局面,工业革命进入第二阶段,全球处于一个全新的上升期,技术、经济和政治多重利好,加上陈济棠督粤期间,采取了一系列扶持工商业发展的措施,佛山工商业有所恢复,城镇规模和实力也有所回升,但整体上保持着与佛山老城核心区范围一致的状态。民国至新中国成立,佛山镇大致维持同等规模,其城镇地位也相对保持在县至地级市城镇层次,新中国成立之后至改革开放前,由于国家在整体政策导引上,偏重中西部,且重点在大小三线,东、南部沿海地区发展受到抑制,佛山地处珠三角地区,自然也在控制发展的行列。由此,道光至改革开放前,尽管佛山城镇规模几经起伏,但其城镇总体规模大致维持在相对稳定的发展水平,城镇地位也大致保持在县(地区)城市的层面。改革开放直到2000年以前,佛山借国家倾斜发展珠江三角洲地区政策的东风,在经济发展、产业恢复等方面出现日新月异的局面,但城市总体规模和层次,在整体上基本维持清代以来的基础格局。街巷空间格局自民国以来,还是发生了不少变化,主要表现为街巷空间[1,2]向城镇道路交通网络空间的演化发展,建筑层面的更新表现[3]为以“单位”促动为主的办公和住宅设施的更新。城市整体空间风貌和格局则持续维持原状。随着1994年佛山进入第三批国家历史文化名城名录,佛山市分别于1992年、1996年、2004年、2008年编制和修订了历史文化名城保护规划,这些历史文化名城保护规划的编制和修订,也在一定程度上延续了佛山老城的物质遗存和历史风貌。产业结构调整和城市发展的客观要求,促使佛山必须加强对老城片区的土地、空间、道路、产业和业态等进行改造和优化,本世纪初以来,佛山老城区开启了整街区改造尝试,然而改造也产生一些新问题,使其濒于停顿。同时,历史文化名城保护的关联法规也制约了佛山老城的改造、发展。佛山对城市空间发展的取向,转到城南的佛山(东平)新城区域,试图通过建造一个新的现代化城区来疏解老城区的各项功能,并取得老城区发展和历史文化名城保护之间的平衡。然而新城征地受阻,加之新一轮行政区划调整、广佛同城化趋势、地铁建设和房地产升温以及国际金融危机的影响,土地、空间、产业的制约和矛盾日益加剧,不得已之下,佛山地方政府将目光重新回调到老城区及其周边主要区域的“旧城镇、旧厂房、旧村镇”,试图通过对这些“三旧”用地功能的改变,改善佛山城市空间结构,塑造更好的城市人居环境。2007年,以“三旧改造”为概念的佛山老城区改造从祖庙—东华里片区(岭南天地项目)开始,并迅速拓展到文华南片区(普君新城项目)、佛山创意产业园区片区(1506项目)、莲花路—升平路片区(佛山名镇项目)、文华路沿线旧改等。然而,佛山老城区旧城改造却缺乏基于城市性质梳理、发展谋略定位等的全面考量,更像是一场资本和权力的“即兴演出”。这种由资本和权力主导的改造带来更加复杂的论争,主要集中在:对佛山老城区这样的历史文化名城保护核心区来说,过于强调其“旧区”属性,而罔顾其历史文化资源核心区要义;只强调佛山城市、产业、经济等方面的发展诉求,而罔顾佛山历史、文化和地方传承及其本地性;只强调佛山老城区作为普通城市的旧城镇特征,而罔顾佛山作为国家历史文化名城的核心要点,这样的城市旧城区改造更新思路和策略是否真的能够为佛山老城区改造带来助益?而不会滋生其他发展问题和理论困扰?为了思考佛山历史文化名城在汹涌而来的城市更新和“三旧”改造、城市升级等运动中的坚守、发展和转型改变,在全球化、快速城市化、现代化和高度商业化的情境下,重构佛山历史文化名城特质和内容系统。本研究试图寻找一种基于区域生产网络发展对于城市更新和旧城改造的意义和作用,运用区域生产网络理论和城市演化理论作为考量与分析佛山历史文化名城城市更新和改造的指引,进而得出佛山老城乃至历史文化名城改造、更新在理论与实践方面的思考、建议。[1]铁路环保法规汇编《中华人民共和国文物保护法》,2013。[2]指其时佛山和广州在产业发展上的分工合作,广州作为外贸港,负责对外运输和发挥市场空间的作用;佛山则以手工业产业发展为中心,通过产业形式为广州的外贸和市场功能提供支撑。广州和佛山互为依存,共同发展。[3]机关、团体、事业法人组织、企业法人组织等非自然人的实体或其下属部门。第二章基本概念和研究设计一相关概念界定(一)城市更新、城市再生、城市复兴在国外,对城市更新概念较早、较权威的界定,来自1958年在荷兰海牙市召开的城市更新第一次研讨会上:“生活于都市的人,对于自己所住的建筑物,周围的环境或通勤、通学、购物、游乐及其他的生活有各种不同的希望和不满,对于自己所住房屋的修理改造,街路、公园、绿地、不良住宅区的清除等环境的改善,有要求及早实施,尤其对于土地利用的形态或地域地区制的改善,大规模都市计划事业的实施,以便形成舒适的生活、美丽的市容等,都有很大的希望,包[1]括有关这些都市改善,就是都市更新。”E.伯吉斯和D.博格认为:“若将城市视为一个有机体,则其动态变化过程将会出现成长、成[2]熟、衰退、没落或更新等现象。”法国城市规划师弗朗索瓦茨·肖埃认为“城市更新即城市规划,城市更新是有意识的干预行为,城市更新是建立在城市发展过程中,并产生经验的累积的过程”。Roert将城市更新定义为:“用一种综合的、整体性的观念和行为来解决各种各样的城市问题,应该致力于在经济、社会、物质环境等各个方面对[3]处于变化中的城市地区做出长远的、持续性的改善和提高。”该概念突出强调了城市更新的整合性,认为对城市社会、经济、文化等方面的提高与对城市物质环境的改善同等重要。人们对城市更新本质的认知也从简单的单维更新(即以物质环境改善为主)向更综合、更全[1]面的多维更新转化。国内研究较为知名的有:陈占祥基于对西方城市更新概念的定义和理解,把城市更新定义为城市“新陈代谢”的过程,在这一过程中,更新途径涉及多方面,既有推倒重建,也有对历史街区的保护和旧建[2]筑的修复等;吴良镛院士从城市“保护与发展”的视角,提出了城市“有机更新”的概念,该概念主要针对城市历史环境的更新,并较多强调对城市历史旧区物质环境的改造和更新,而对与其关联的经[3~4]济、社会、文化等内容关注较少。进入21世纪以来,更多学者提出对“城市更新”概念的新理解,张平宇提出“城市再生”、吴晨(2005)提出“城市复兴”、于今(2011)提出“城市更新”等[5~7](见表2-1)。表2-1几个代表性的中国城市更新概念城市再生是随着城市化升级,针对不同历史时期城市问题,制定[8]相应城市政策,并加以系统实施和管理的一个过程。Roert认为城市再生是一项旨在解决城市问题的综合、整体的城市开发计划与行动,以寻求急需改变地区的经济、物质、社会和环境条件的持续改[9]善。曲凌雁认为,城市再生从广义上理解,是一个多目标行动体[10]系,主要包括环境再生、经济再生和社会再生三个方面。杨继梅则提出了城市再生的文化催化理论,认为城市再生的文化催化包含[11]“物”“事”“人”三个载体作用。就城市化发展的内容属性变迁来说,西方国家城市发展经历了从[12]快速城市化到城市衰败,再到城市复兴的过程(见表2-2)。也就是说,城市复兴,是城市化到城市更新再到城市再生之后,因城市化和更新道路依然无法有效解决城市发展问题,而出现的关于城市改造和发展新理念和思路。最早提出“城市复兴”概念的是英国,英国政府认为,城市复兴目标是城市再生可操作性的措施,从而将人们重新吸引回城市中心。英国政府为此出台了城市复兴“白皮书”,提出为有效实现城市复兴,需要编制好规划和设计,改善环境,提供更多的娱乐休闲设施,提高社区和街道的安全,吸引更多的城市投资资金。[13]但也有英国研究者认为,采取城市复兴这一方式,其主要目的是使英国的城市更接近欧洲大陆的一些城市,如巴塞罗那、阿姆斯特丹等,体现城市的“咖啡文化”,这样才能为广大中产阶级所接纳,[14]使他们回到城市中心。H.Brouwer(2004)认为城市复兴的主要目标是改善人民的生活质量和工作条件。因此,城市复兴旨在吸引中[15]产阶级重返城市。表2-2从城市更新到城市复兴的理念演化续表就城市复兴的内涵意蕴来看,其最根本的宗旨是对城市进行社会、经济和文化上的更新,将一个因衰败而成为社会负担的城市,转变为社会的一种资产。城市复兴目前已从西方发达国家面对的挑战,转变为全球范围内所有转型社会和城市经济体共同面对的问题和挑战。北美城市规划于20世纪70年代引入“城市复兴”(Ura[16]Reaiace)概念,在延续英国关于“城市复兴”概念基本要义的同时,它强调“以综合和整合的视角,并通过行动,引导对城市问题的分析,寻求转型地区持续增长的条件,其中包括经济、形态、社会和环境等方面的内容”(Coleutt,Taley,1990)。其不仅强调城市复兴的目标,更指出城市复兴是一个持续的长期过程。复兴的目标是通过政府资金以及发挥协调的杠杆作用,吸引私营开发部门进[17]入衰败的城市中心区进行开发。20世纪90年代以来,消费文化不断地在全球化进程中渗透和蔓延,越来越强调文化导向的城市复兴过程,文化或者被贴上文化标签的各种媒介已经成为当今城市发展的一项重要资本,并被广泛地应用于城市建设、营销和生活的各个方面。文化政策和城市复兴已越来越[18]多地相互交织在一起,文化导向的城市复兴强调文化对城市社会、经济的影响,并主要通过文化产业提振、设计和运用来作用于城[19~21]市改造和更新实践。随着城市间日趋激烈的竞争,城市改造和更新更加突出文化的复合意义,以“文化转向”方式重塑城市形象并恢复经济的趋势愈益明显。P.Roert和H.Syker在他们合著的《城市改造》一书中指出了城市复兴的途径,包括:①可以通过在商业/工业资产或住宅方面进行新的投资来引导城市复兴;②通过适当的法律设定和财政政策导引,以城市土地开发(再开发)来进行引[22]导。(二)历史文化名城、佛山老城区对历史文化名城的概念认定,主要依据《文物保护法》,“历史文化名城”是指“保存文物特别丰富,具有重大历史文化价值和革命意义的城市”。本研究所指称的佛山历史文化名城,是指1994年颁布的第三批国家历史文化名城佛山市,其作为国家历史文化名城的核心要素在于其是广府文化的集中代表,是古代特殊职能城镇(陶瓷和冶炼)的代表,是近代工商业名城的代表,是岭南水乡和“三基农业”的典型代表。为清楚界定研究区域,本研究对佛山老城区、佛山老城、佛山老城历史文化名城核心保护区等概念所指代的地域范围加以严格界定。首先,对应于佛山市旧城更新的实证研究,采用老城区与之相呼应,其地域范围涵盖佛山市禅城区的旧建成区,而不包括始于其他乡镇级以上级别的各类城镇旧建成区;对应于佛山市古城保护的实证研究,采用佛山老城这一地域概念与之相呼应,它是佛山历史文化名城的核心区域、佛山古城所在,也是佛山历史文化遗产蕴含最丰富、历史文化建筑保存最集中、佛山传统民间文化传承和保存最重要的载体及区[23]域(见图2-1)。图2-1本文涉及的佛山老城区主要概念的空间层次关系资料来源:见张戈《旧城更新与古城保护的互动性研究——以佛山老城为例》,华中科技大学,2005。(三)区域生产网络所谓区域生产网络,指的是区域内不同国家和地区凭借相对优势,指导、安排生产部门进行专业化生产和装配,形成覆盖整个区域的生产网络,区域生产网络降低了区域和城市的生产成本,增加其在全球的竞争优势。构建区域生产网络是区域经济一体化的有效途径。Rodogue等人认为生产表达了经济价值增加的事实,它在内容上包含商品和服务两个大类的创新、资源转化和成品生产等。网络则指的是实体和非实体(信息)相互作用形成的复杂网络,表达了交易和分配的客观情况。Yoguel、Novick、Mari将生产网络置于一个中观尺度的框架下来审视,认为区域生产网络在概念上既不同于微观上的网络个体在特性方面的集成,也不同于宏观尺度层面上的集群和系统概念。其定义的生产网络包含三个关键内容:其一,组成个体的地理临近性不是必要的;其二,建立在经济关系上的非价格机制存在可能性;其三,生产网络内部建立起来的无形流动和非价格关系的重要性允许[24]不同程度的发展。生产网络最明显的优势是具有地理尺度性,按照地理范围由大到小可以划分为全球、区域、国际、国内、地方等不同尺度的生产网络(见表2-3),在地方观察到的经济现象与国家、区域和全球尺度的现象有直接关系。全球尺度的经济现象也需要在地方、国家和区域的层面上来做基础分析。表2-3生产网络的空间尺度及相关概念续表对城市来说,城市的发展不能脱离地方、区域和邻近城市的发展独立存在,在全球化泛滥的当下,城市的更新、改造不可能是一个孤立事件,城市的发展是以一个节点的方式,存在于城市运行网络之中,并参与到全球、区域和国家的经济、文化、产业等要素系统的建构中。因此,我们考察城市的旧区改造,也不能将其仅仅放置于一个孤立的城市场景来分析、建构,而必须以更加综合、宏观和复杂的视野,将之放置于基于全球、区域、国家和地方网络中,以复合发展的视角和网络化动态运营的角度来分析、观察、思考城市旧区的更新、改造。本研究试图运用区域生产网络的关联理论,将佛山老城区放在城市和区域发展网络系统中,观察、思考具有历史文化名城身份背景的佛山老城区在改造更新中应该践行和总结的一般理论和规律。二研究设计(一)研究目标本研究将起源于2007年以来,对佛山老城区发展注定会产生“剧烈改变”的城市改造活动,置于历史文化名城发展自身逻辑和珠三角地区城市群动态演变序列中,考察佛山老城改造对于佛山城市发展及在珠三角地区城市群中地位变化,进而研判佛山老城区的改造更新,应该基于何种理论、思路、方法、途径和策略,提炼、思考基于历史文化名城改造、区域生产网络发展和城市演化逻辑之上的,历史文化名城老城核心区改造理论和实践经验。1.理论目标(1)从区域生产网络分析的角度提炼和界定历史文化名城老城区发展重构研究的科学问题,确立理论分析框架。(2)总结提炼基于区域网络分析的历史文化名城老城区发展重构的问题分析表达方法,内部生成演替机制、机理以及途径;从内外部影响、制约因素入手,分析老城区发展重构的区域促动系统和城市内部因应机制和表达策略。2.应用目标(1)提出基于区域生产网络分析的历史文化名城老城区物质要素系统(建筑、街巷、街区等)和非物质要素系统(地方感、邻里空间、地方文化氛围等)发展重构的方法、路径、策略和措施方案。(2)案例地老城区物质要素系统和非物质要素系统的发展重构经验研究。(二)研究意义1.现实意义随着中国城市(都市)化步伐日益加速,城市规模迅速扩大,城市空间不但飞速地向外扩张发展,也在快速对传统城市内部空间进行功能置换。这种城市发展内部空间功能置换和成长发育与代表传统城市风貌的老城区、老街区空间重合,产生巨大的机会利益。在这种机会利益面前,决定城市风貌存留的微观主体(居民、开发商甚至城市地方政府)都缺少保护传统风貌街区和历史古城的动力,使得历史名城长期积累下来的文化财富日渐消失,城市风貌日渐趋同,形成“千城一面”的中国城市化怪现象。同时作为中国历史文化名城体系中的一分子,各历史名城都承载和背负着城市发展的历史、文化和地域乡土记忆,它们对了解中国地方文化、城市发展变迁历史等都有显著的指标含义。在目前快速城市化浪潮中,这些历史文化名城自然也挣脱不开城市(都市)化的宿命,因此,如何在快速城市(都市)化过程中,既实现历史文化名城城市功能和空间发展的合理布局,又能较好地保留、优化老城区和传统风貌街区,是目前亟待解决的难题之一,需要理论研究来加以回答和解决。本研究尝试从历史文化名城老城区发展重构的角度入手,以区域生产网络分析方法来切入研讨问题,研究具有现实意义。2.学科理论意义当前,历史文化名城及其传统社区(老城区)在城市快速现代化改造中,如何存续,处境维艰:传统街区和城市历史文化遗产要么被遗弃、侵蚀、毁失,要么被孤立、划界,任其自生自灭。这样的发展路径,显然背离了历史文化名城和城市文化遗产保护宗旨。为此,我们亟须从区域、城市发展学及历史文化名城和文化遗产保护学等学科角度,探讨关于历史文化名城及其传统社区(老城区)的可持续发展路径、机制和策略选择。这就要求理论研究应在区域和城市化发展的同时,如何尽量确保和协调历史文化名城及其传统社区(老城区)的合理发展和重构。应建立何种机制框架,采取什么方法系统来有效应对?谁为依托,谁为主体?相关组织机制如何确立、运作和演替?本研究可以增加学科在上述领域中的理论认识,丰富学科相关理论。3.方法论意义近年来,国内城市更新和空间重构研究者日趋增多,研究成果和结论多是基于对城市化发展的认识和判断,以单向开发和利益目标为倾向,保护和动态留存的研究较少。在研究方法上,较少有采用系统方法进行合理构建的成果,缺乏综合视野。本研究拟基于区域生产网络分析方法,把历史文化名城及其老城区的发展重构置于区域和城市群综合发展的视角下观察、审视,思考其发展重构的必然性,提炼其发展重构的路径、机制和策略。这一研究路径和方法为研究结论的科学性和严谨性提供了保证。(三)研究内容1.区域和城市发展学分析以区域和城市发展学相关理论为基础,以区域生产网络分析为基本方法,抽象和建构历史文化名城老城区发展重构的研究问题和理论分析框架,这是本研究的理论研究内容之一。本研究以区域生产网络分析方法为基础,从历史发展和城市经济社会发展出发,提炼和建构历史文化名城老城区发展重构的具体研究问题和理论分析框架,并以此引导理论分析、框架设计和经验研究。具体内容如下:(1)基于区域和城市发展的历史文化名城老城区发展重构的历史逻辑、必然性分析;(2)历史文化名城及其老城区发展重构的现实困境及导因分析;(3)基于案例地本身的发展重构分析。2.文化遗产管理学分析从历史文化名城保护以及城市文化遗产管理保护学的立场出发,以案例地为研究对象,分析和建构历史文化名城老城区在快速城市化浪潮下的历史建筑、城市街区、历史场景、环境空间和生活方式等的发展重构。主要包含以下几个方面的研究内容:(1)历史文化名城老城区物质要素系统(建筑、街巷、街区等)的发展重构研究;(2)历史文化名城老城区非物质要素系统(地方感、邻里空间、地方文化氛围、特色的地方环境和空间等)的发展重构研究;(3)历史文化名城老城区发展重构的理论提炼和对策建议。(四)研究中拟突破的问题1.分析框架方面的问题从历史文化名城保护和区域文化遗产保护学的角度,建构历史文化名城老城区发展重构研究问题,基于区域和城市生产网络分析方法,建立研究分析框架,这是本研究的重要前期工作和后续研究基础,也是研究理论目标之一。快速城市化和区域社会经济迅速发展,导致历史文化名城老城区传统文化元素、整体风貌和空间发展迅速异化、崩溃,其实质是历史文化名城及其老城区,如何在快速城市化浪潮下实现传统和现代合理对接、城市传统空间和文化遗产元素如何进行合理的发展重构。而合理的发展重构,一是要建立一个基于区域和城市生产网络分析的理论分析框架,通过理论分析框架,认识发展重构的必然性、合理性;二是要指出目前历史文化名城及其老城区发展重构的乱象特征,乱象之源、之根;三是要构建出合理的发展模式,提出理论发展模型。2.研究设计方面的问题历史文化名城及其老城区发展重构是中国社会经济发展对城市和区域发展理论研究提出的研究,学界要提出有效的历史文化名城及其老城区发展重构对策建议,必然是基于对“如何发展,怎样重构”这一问题的正确回答,而这又以对与这一问题相关或递增层次的“为何如此”和“是什么”等问题的回答为前提,相关问题的回答将有利于重构有关历史文化名城及其老城区发展的理论体系。本研究意在研究历史文化名城老城区发展重构所涉及的“为何如此”“如何发展重构”的问题。历史文化名城及其老城区在快速发展浪潮中,面临城市历史文化要素系统灭失和遗弃的问题,是中国市场化进程和社会经济转型时期特有的问题。解决这一问题的机制和策略并不是现成存在,而是城市发展的相关利益主体在中国政治经济体制框架下,基于长期利益博弈过程而形成的,对该过程的认识,无法通过对现有理论的演绎和推导而获得,还需借助现实的观察、分析和提炼来累积和生成。通过现实的研究而达到对某一类问题的“为何、如何和做何”等的回答,案例研究方法是可行途径之一,历史文化名城老城区发展重构,是伴随着区域社会经济发展和快速城市化浪潮的席卷而出现的,该问题的形成,既有区域一体化和快速城市化发展下的共性特征,又有文化遗产保护层面上的特性和要求,表现为历史名城的“旧”和现代城市功能“新”的整合、冲突。在当前的城市现代化路径下,往往是“破旧(毁旧)立新”,这就和历史文化元素(遗产)的保护宗旨相冲突。同时,就已有研究来说,对这一问题的观察和思考多为自说自话,“屁股”决定立场,使得对如何实现历史城市和老城区在合理保护文化遗产和地方风貌、实现必要的更新和重构问题上,目前还没有卓有成效的指导方案。基于此,建构以区域生产网络分析方法的历史文化名城老城区发展重构研究,就具备了理论探索和现实需要的双重基础。本研究在整体设计上选择基于区域生产网络分析方法,对相关问题加以探索,通过对历史文化名城老城区物质要素系统和非物质要素系统的发展重构研究,探索其演进路径、促动机制和策略方案。并以国家第三批历史文化名城名录成员佛山市为案例地,对研究讨论主题有典型的代表意义。佛山地处改革开放前沿珠江三角洲地区,是珠江三角洲城市群的骨干城市,同时,佛山历史文化悠久,明清为四大名镇之一,近年来,随着广佛都市圈的快速发展,佛山老城区进入快速的“去旧迎新”阶段,文化遗产和传统元素加速毁失,引发了一系列问题,这些为本研究提供了理想的研究对象。(五)研究思路和框架1.研究的整体思路和设计本项研究基于区域生产网络分析方法,研究、提炼历史文化名城老城区发展重构的路径、框架和策略,并提出相应的对策建议。研究的基本过程为:首先从问题和现象观察分析出发,经理论梳理提炼和界定讨论问题,确立研究分析框架并设计研究方案;其次,基于理论框架和研究设计进行案例地调研和各种事实材料的收集后,以案例地为基础,进行经验研究和理论分析,获取研究结论。2.研究框架本项研究的研究思路和研究设计框架示意见图2-2。图2-2本研究的研究思路和研究设计框架三主要观点历史文化名城作为中国城市文化、历史和地方特征的保存载体,在经济发展和城市转型的浪潮中,保护举步维艰。如何处理城市更新和历史、文化和传统地方性保护的动态平衡,便是当下急迫而又必须深思的研究。本文以佛山为例,探讨佛山老城区历史文化保护核心区在城市发展的产业调整、用地需求、空间优化目标下,如何基于城市更新、产业发展、文化发展、遗产保护等视角进行老城区的发展重构,并立足区域生产网络分析和城市演化路径分析,提出佛山历史文化名城老城区发展的更新、重构思路、方法和途径。本研究不是在传统历史文化名城城市更新研究上的简单重复与总结,而是希望借助近年来国内外城市和区域研究的理念、方法,将城市更新和重构放在更加宽泛的生产市场网络构建的角度来深入研究,关注城市发展在历史和地方上的传承、联动和互促,通过全球视野关注地方,并以地方发展关联全球来动态分析。[1]于今编著《城市更新:城市发展的新里程》,国家行政学院出版社,2011。[2]E.W.Berge,D.J.Bogue,Cotriutiotouraociology,UiverityofChicagoPre,1964.[3]〔英〕罗伯茨、塞克斯、叶齐茂等:《城市更新手册》,中国建筑工业出版社,2009。第三章研究述评及理论契合性分析一区域生产网络分析研究现状及述评(一)网络、生产网络和区域生产网络对网络概念的认知,不同学科对“网络”一词有不同的理解,[1]Mailat等人从多维角度对网络概念进行了定义。Hakao则指[2]出,网络应包括行为主体、活动的发生、资源等三个组成要素。网络的形成是具有参与活动能力的行为主体,在主动或被动地参与活动过程中,借助资源的流动,所形成的彼此之间正式或非正式的关系总和。就贸易、产业和经济发展的区域化来看,20世纪90年代以来,国际经济发展中出现了新的信息密集型的技术组织模式,推动了全球化和区域开放化的进程,全球经济形势变化带来需求、市场、生产生命周期、规模经济和范围经济等领域的特征,因此在新的世界经济形势下,提升竞争力必须考虑一些新的因素,如地方氛围的发展程度、[3]网络的创新能力和商业个体的行为等。为了满足更加复杂的生产过程和提升竞争力,需要一种新的生产组织形式以应对新的世界经济形势,“生产网络范式”(roductioNetworkParadigm)便成为产业[4]组织和经济发展的新范式。生产网络的概念不以个体之间的相互隔绝为理论前提。Rodigue、Comtoi和Slack认为,生产表达了经济价值增加的事实,它在内容上包含商品和服务两个大类的创新、资源转化和成品生产等。网络是指实体和非实体(信息)相互作用形成的复杂关系,包括链接和流动,[5]表达了交易和分配的客观情形。Kalataridiz认为,生产网络概念的运用,是为了表达生产个体在没有明显法定关系的情况下,如何[6]建立物质流、信息流和资金流的连接形成。Sturgeo认为,生产网络体系中的由于价值链的劳动分工和网络链接具有差异性,所以这[7]种差异性就是区域生产网络研究的重要对象。Hedero(2002)等认为,生产网络具有为商品和服务在生产、分[8]配和消费中相互联系的功能和作用。Yoguel、Novick、Mari定义的生产网络包含三个关键内容:其一,组成个体的地理临近性不是必要的;其二,建立在经济关系上的非价格机制存在的可能性;其三,生产网络内部建立起来的无形流动和非价格关系的重要性允许不同程[9]度的发展。[10]基于不同尺度的生产网络体系表现为以下类型:(1)国家生产网络,体现为国家尺度的生产网络。(2)跨国生产网络,体现为大国异质性空间或国与国之间的跨区域和空间的生产网络。Ert用大国的异质性(Heterogeicity)很好地说明了国际联系的重要性。[11](3)区域生产网络,指的是大区域内不同国家和地区通过相对优势的指导,安排生产部门的专业化生产和装配,形成覆盖整个区域的生产网络。(4)全球生产网络,是经济全球化的诠释工具。Sturgeo认为,生产网络的全球尺度至少应跨越两个国家或贸易组织。[12](5)地方生产网络,地方生产网络是一种以成员的地理接近和社会接近为特点的特别类型的网络,在大尺度生产网络的研究基础上,运用“地方生产网络”分析复杂的地方经济体是十分有效的。(二)全球生产网络Borru等人认为,全球生产网络是指“企业内部和企业之间的一种关系,通过这种关系,企业组织开展起整个系列的商业活动;从研发、产品定位和设计,到投入要素的供给、制造(或服务的提供)、[13]分销和服务支持。”全球生产网络研究主要包括以下几个方面:(1)全球生产网络的研究维度。Dicke、Herdero、BatheltamGluckler、Yeug、Hugh等学者从权力治理、地域性、网络和嵌入等多个维度研究全球生产网络,主要关注居于领导地位的跨国公司对一般供应商的权力控制。[14~18](2)全球生产网络的组织结构、治理模式。Dicke等认为,全球生产网络是经济全球化时代以跨国公司为主体,并足以取代它的[19]最有效产业组织形式。生产网络的治理不同于企业层级之间的治理。“龙头企业”居于全球生产网络的核心地位,负责网络内的战略制定、组织领导、管理控制等,对网络中其他企业进行权力治理。(3)全球生产网络与新国际贸易体系的构建。He、Wrighley,etal、WrighleyamCurrah、Coeamlee等研究者的工作,显示了基于地域和空间意义的文化多样性和文化嵌入是跨国公司经济活动的主要组成部[20~23]分。(4)生产网络内部的产业升级、产业集聚。BairamGereffi、PalaacueramPariotto、Liu,etal.、CoeamHe等以GPN为[24~27]分析架构,探索思考价值创造和产业升级的多层级过程。Schmitz、Gereffi研究了关于产业升级、机制建立、增殖和获得的过[28~29]程。GroteamTue研究了印度金融服务业的升级问题。[30]李学迁、朱道立等探讨了全球生产网络下的产业集群网络演化[31]问题。郑准,王国顺(2012)分析了全球生产网络的俘获效应[32]和集群企业转型升级问题。(5)全球生产网络在部分区域范围内的锁定,区域生产网络的形成等。ParthaarathyamAoyama通过印度班加罗尔软件业的案例研究,分析了跨国公司制度背景和地方企业家的观念等非正式GNP研究对增进我们对全球经济中的地方升级的[33]认识颇有助益。DeeramBathelt以上海汽车集群的供应链为案例,分析了德国公司在异质文化背景和制度下的适应性和自我调适过[34]程。LiuamDicke则研究了国外投资人在中国汽车行业投资过程[35]中的行业“嵌入”问题。而对于全球生产网络在部分区域范围的锁定和型构,最为典型的区域就是东亚区,近年来大量的文献围绕东亚区域生产网络展开了多种主题的研究探讨。(三)东亚区域生产网络自20世纪末开始,国际分工进一步深化,世界各国对外贸易、产业分工和生产空间组织逐渐向区域性网络体系汇集,由此,在全球范围内形成三个区域性的生产网络,即德国与东欧国家之间、美国与墨西哥之间及东亚各经济体之间,国外文献对这三个地区的生产网络[36]都有涉猎,但东亚地区的生产网络吸引了更多关注。近四十年来,东亚区域已经成为世界范围最重要的加工制造基地,并由此形成[37]了一个完整的区域生产网络。目前东亚区域生产网络的研究多集中于贸易层面:(1)生产过程分散化与东亚区域生产/分配网络。Ado和Kimura的系列论文都将“生产过程分散化”作为区域生产/分配网络的前提条件来进行研究,[38~用日本企业的微观数据和各经济体的宏观数据做经验分析。41]他们的研究成果指出,东亚区域生产网络构成了各个国家经济的主要组成部分,区域生产网络使国家间的要素价格差异和比较优势被垂直生产链条充分利用。同时,日本企业网络向东亚地区的延伸,为东亚区域生产网络的形成奠定了组织基础。但Macityre和Naughto的研究则指出,在全球化时代,美国技术和中华圈生产网络相结合,[42]已经取代日本企业在东亚地区的地位。(2)全球商品链与东亚区域生产网络。Kimura从东亚产业内贸易的类型、FDI服务贸易等多[43]个维度论证了东亚生产网络。张伯伟、彭志伟认为,东亚地区[44]具有国际竞争力的产品,大多在区域内具有明显的垂直分工。WillemThorecke分析汇率变动对东亚区域生产网络的影响和作用。[45]张伯伟基于零部件贸易产业链发展,探讨了东亚区域生产网络[46]的动态演变。ChaSiowYue研究了全球价值链与东亚区域生产[47]网络的动态关系。(3)东亚区域生产网络发展演化模式及其促[48~51]动机制。这一方面的研究由日本研究者主导,其主要论点是,东亚的经济起飞及其迁演路径遵循着“日本是领头雁—亚洲四小龙—东盟和中国内地”。各经济体之间形成了产业的“瀑布式转移”与“竹节式升级”,日本企业通过FDI的方式,向东亚地区复制其国内的系列生产体制,构筑了“日本怀抱中的区域生产联盟”。(4)美国、日本与中华圈的国际生产网络。Kim通过RCA指数比较分析了东亚和北美地区生产网络的差异性,认为东亚的生产网络主要是[52]基于专业化驱动,北美则是基于产业内贸易。NatahaHamilto-Hart讨论了亚洲新兴的以政府参与和合作为特征的新区域主[53]义在西太平洋地区的发展及其特征。夏平讨论了东亚区域生产[54]网络和中国对外贸易发展的关系。陈丰龙就区域生产网络和中[55]韩FTA建立的可行性展开实证研究。王德利等对中国跨区域产[56]业分工和联动特征进行了讨论。(四)地方生产网络地方生产网络(LPN,LocalProductioNetwork)是一种以成员的地理接近和社会接近为特点的特别类型网络。其从本意来理解是表达某地围绕生产某类产品形成的密切相互联系的一组企业。Hart和Simmie在探讨创新的空间性时,提出“地方生产范式”概念,将地方生产网络定义为:“地方企业与地方生产要素之间的合作关系和连[57]接。”此后,Dimitriadi和Koh认为,地方生产网络概念的构成主要是中心企业,其成员具有地理接近性和社会接近性等特征。[58]地方生产网络研究的主要内容包括:空间尺度、结构形态和组织方式等三个方面。地方生产网络嵌入地方环境的同时,也嵌入全球生产网络之中,Saxeia分析了来自硅谷的跨国企业家对台湾地区和印[59]度的IT产业兴起的重要作用。Dimitiadi等对希腊卡斯托里亚地区皮衣产业的分析,揭示了多种类型的参与组织运行于产业区外部。[60]冯利萍对跨国公司嵌入地方生产网络的特征和影响因素进行了[61]分析讨论。在地方生产网络形成和运行对当地资源和网络型构的依赖方面,Storer、SimmieadHart、Gruert等都讨论了地方生产网络或价值链在运行中所依靠的当地资源与设施,包括人力资源培训机构、相关[62~64]服务、资本装备和基础设施。马海涛等详细讨论了地方生[65]产网络理论运用于大尺度生产网络体系分析的情形。(五)区域生产网络研究评述就区域生产网络的研究现状特征和发展态势来看,其研究的发展走向呈现以下特征:(1)区域生产网络研究在强化和深入讨论生产网络概念、内容和框架体系的内涵、外延的同时,研究视角重点向区域生产网络的组织结构、治理模式等深度领域发展;并关注(全球)区域生产网络参与国际贸易新体系,以及其分工组织网络的构建和型构。在其内部发展演化和整合研究方面,更加注重网络组织内部的生产和产业发展演化规律、特征的总结,并加强对生产网络和特定区域内部特征及其资源、特色和经济结构等关联要素的锁定和形成机制的研究分析。(2)地方区域生产网络作为近年来颇受关注和研究的话题,在其当前研究和进一步拓展方面,体现为以下基本特征:第一,研究视点继续关注地方区域生产网络的研究内容、体系及科学内涵;第二,地方区域生产网络的网络特征、网络形态、演化特征等;第三,地方区域生产网络在全球网络生产体系和贸易发展体系中的嵌入,包括嵌入的形式、特征、模式、作用机制等;第四,地方生产网络对地方资源、产业、地方文化和地方特征等方面的依赖和型构,主要基于文化、社会、资源、产业、经济发展等方面,分析讨论地方生产网络演化成型时,对地方各个要素及其系统的依赖机制和相互作用系统;第五,最新的研究视点开始更多地关注地方生产网络及全球生产网络在发展演化过程中的“权力在生产网络的全球和地方契合过程中的治理”及(全球)生产网络和地方产业集群的“去地方化”研究。(3)在(全球)区域生产网络的三大区域研究方面,东亚区域生产网络的研究依然是研究的热点,其主要关注领域包含以下方面:第一,东亚区域生产网络的分配体系及其网络发展特征;第二,全球商品链组织与演化发展下的东亚区域生产网络结构关系;第三,东亚区域生产网络发展演化机制、形态及其模式等;第四,以中国为讨论对象的(全球)区域(地方)生产网络发展、演变方面的成果呈快速增长态势,中国现象及其与周边东亚国家、东盟国家的产业协作,贸易互动下的生产网络编织和发展,成为未来研究的重点。(4)研究话题和关联研究手段,在区域生产网络研究中得到更多的运用和体现,表现为多种关联研究理论和技术手段被应用于区域生产网络的理论分析和实践检验中,比如运用复杂网络理论讨论产业网络、将社会网络理论运用于集群企业创新机制的讨论,基于微观动力机制的企业竞合网络博弈建模及应用分析,将模块化理论与生产网络组织和产业集群发展集合,形成模块化生产网络。(5)在(全球)区域(地方)生产网络的进一步研究中,基于产业、经济发展和城市与区域的演化互动、相互作用机制及其表现等,将受到更多重视,尤其是产业和经济发展的网络结构,对城市及其网络演化的影响和作用等方面。新兴的技术、理论将会在(全球)区域(地方)生产网络的理论和实践研究中得到更多应用。二城市遗产保护、历史文化名城发展研究现状及述评(一)城市(文化)遗产、城市历史保护文化遗产的严格定义和分类来源于UNSCO,其通过的《保护世界文化和自然遗产公约》(1972)建立了“文化遗产”(cultural[1]Heritage)国际通行概念——不可移动的文物、建筑群、遗址等,并将遗产分成文化遗产、自然遗产和复合遗产。在保护对象上,城市遗产(历史)保护对象,经历了一个从关注显赫历史人物和对国家、政治、历史有突出贡献和意义的人物、建筑、纪念地等的阶段,逐渐发展到保护普通人生活的一般历史建筑(如住宅、厂房),保护特殊下层群体的纪念场所(如慰安所、弱势聚落)以及具有典型地方意义和代表性特征的聚落遗址和历史建筑等。这种保护对象迁演过程,一方面说明城市历史保护受到比较严重的国家政治力量作用,历史遗产保护常常会因政治而工具化,历史遗产保护具有较为强烈的国家政治权力意志的体现和作用,并迎合国家及其统治阶层意志的口味,历史遗产在某种程度上不可避免地成为国家合法意识形态的物证和工具。同时,随着政治、经济发展和多元化民主法治理念的全球化普及,城市历史保护也逐渐更多关注城市、地方意义上的,体现为历史和文化事实的普通人聚落环境、生存状态和特征的,具有典型意义的区域、群落和建筑物。这个过程在空间上体现的,可能是范围的扩大、形式的多元,而更深层的原因是价值观的变化——对大众历史和文化的强调,是民主化(平民化)的必然。我国城市(历史)遗产保护对象的选择,经历了从注重单体建筑和文物的“单保护”,逐渐发展到重视对历史街区和历史文化风貌区的保护、保存,进而强调对历史城市的整体保护和加强对区域、流域和历史文化空间廊道(河流文化区、历史文化流通区域等)等的差异化发展过程(见表3-1)。国家文物局局长单霁翔曾指出:“中国应当重视在遗产品类上的不平衡问题,关注工业产业、科技、民族、民俗[2]类文化遗产和各种自然遗产,不断完善和丰富遗产名录。”表3-1遗产保护的类型及其发展特征(二)城市遗产保护理论与实践1.城市规划、设计视角下的城市遗产保护研究我国城市规划和设计视角下的城市遗产保护研究,开始于20世纪80年代,并与当时国家在城市规划和遗产保护领域的规范管理和制度化建设相对应。研究视点主要集中于:(1)关注城市规划和历[66~71][72~史保护的关系问题;(2)城市设计与历史遗产保护78][79;(3)特定历史遗产的考察、认知、利用、保护和发展研究~87]。2.遗产保护的实践和方法遗产保护实践与方法的讨论主要关注:(1)居住环境的文化意[88~89]义及城市设计问题;(2)历史城镇和遗产保护的规划目的[90~93]及对遗产保护的实践与方法进行了研究和探索;(3)历史[94~遗产保护的资金、管理、公众参与、政策、文化和保护体系101]。3.国外城市遗产保护经验介绍(1)国外城市遗产保护的经验介绍,涉及日本、法国、英国、[102~106]德国、美国、荷兰等。(2)遗产保护的国际公约及其内[107]涵分析。(3)国外城市更新和遗产保护的共性问题、经验、教训。项光勤总结了发达国家旧城改造的经验和教训,并分析其对中[108]国城市改造的启示。章岩从美国的城市更新和中国的旧城改造的历程、关联性入手,分析了中美城市改造和更新的共性问题。[109]4.历史建筑保护与再利用对建筑遗产的保护和再利用,是遗产和文物保护利用的最早倡导和研究领域,英美等遗产保护和利用机制发展相对完善的国家,在这试读结束[说明:试读内容隐藏了图片]点击下载...

    2022-04-05

  • 资产会计要素_2022年中级会计实务每日一练

    【单项选择题】下列各项中,符合资产会计要素定义的是()。(★★)A.筹建期间发生的开办费B.委托加工物资C.约定3个月后购入的存货D.盘亏的存货【正确答案】B【答案解析】资产,是指企业过去的交易或事项形成的、由企业拥有或控制的、预期会给企业带来经济利益的资源。选项A和D,预期不会给企业带来经济利益选项C,不是由过去的交易或事项形成。...

    2022-04-05 中级会计内容实务 中级会计实务主要内容

  • 生产的 Kindle Voyage 已修复“阴阳屏”问题

    我有好消息和坏消息要告诉E-Ik阅读器(比如亚马逊Kidle和Koo)爱好者:E-Ik公司没有忘记你,但可能还有一段时间才能买到你想要的新显示屏。自2014年CartaHD之后,E-Ik公司再也没有制造出比分辨率更高的显示屏。但周三早上CES(国际消费电子产品展),E-Ik公司告诉我,他们完全有能力推出比目前市场上更多的像素(最高每英寸300像素,或PPI)更高分辨率的显示屏取决于其客户亚马逊和Koo——了解他们需要新一代电子阅读器做什么。“我们对「分辨率显示器较高」的立场是,如果你需要我们就能给,但是否人们平均都重视高于300PPI分辨率显示屏不得而知。E-Ik公司全球市场负责人GiovaiMacii说:我们的一些客户认为300PPI很好,而其他人则认为256PPI也一样好。要问我们的客户,由他们决定。换句话说,如果电子书阅读器的忠实粉丝想要,比如下一代KidleVoyage2有更高的终端显示屏,亚马逊需要知道这种感觉。CES会议给我的另一个收获是:我终于知道2014年第一代KidleVoyage电子阅读器烦人的阴阳屏问题是如何造成的。它使显示器变色:与上半部分的亮白相比,显示屏下半部分呈现出难看的黄色。我知道你在说什么,听我描述了我自己的KidleVoyage有了这个问题,Macii对我说:这里有两部分技术:显示屏和背光(frotlight)。你看到的问题是轻微的非均匀性(o-uiformity)光投射造成的。或者一般来说:以前生产的KidleVoyage光线没有均匀地投射到整个显示平面上,导致显示变色。随着更多的产品投入生产,我们知道如何更好地控制ik。”Macii说。好消息和坏消息并存:好消息是,如果你今天买一个KidleVoyage——以$200价格不便宜,尤其是对于像我这样的电子阅读器忠实粉丝来说——你不会遇到这个显示器变色的问题。坏消息是,受影响的Kidle仍然无法修复。现在向亚马逊索要高端KidleVoyage2吧!—————原文:WatBetterEIkDilayfortheKidle?BugAmazo...

    2022-04-04

学习考试资源网-58edu © All Rights Reserved.  湘ICP备12013312号-3 
站点地图| 免责说明| 合作请联系| 友情链接:学习乐园