配置管理系统VMI基础及扩展
- 格式:pdf
- 大小:575.12 KB
- 文档页数:25
VMI管理系统精选文档、VMI管理系统长期以来,流通中的库存是各自为政的。
流通环节中的每一个部门都是各自管理自己的库存,零售商、批发商、供应商都有各自的库存,各个供应链环节都有自己的库存控制策略。
由于各自的库存控制策略不同,因此不可避免地产生需求的扭曲现象,即所谓的需求放大现象,无法使供应商快速地响应用户的需求。
在供应链管理环境下,供应链的各个环节的活动都应该是同步进行的,而传统的库存控制方法无法满足这一要求。
近年来,在国外,出现了一种新的供应链库存管理方法-供应商管理用户库存(Ven dor Man aged In ve ntory, VMI),这种库存管理策略打破了传统的各自为政的库存管理模式,体现了供应链的集成化管理思想,适应市场变化的要求,是一种新的有代表性库存管理思想。
(一)VMI的基本思想传统地讲,库存是由库存拥有者管理的。
因为无法确切知道用户需求与供应的匹配状态,所以需要库存,库存设置与管理是由同一组织完成的。
这种库存管理模式并不总是有最优的。
例如,一个供应商用库存来应付不可预测的或某一用户不稳定的(这里的用户不是指最终用户,而是分销商或批发商)需求,用户也设立库存来应付不稳定的内部需求或供应链的不确定性。
虽然供应链中每一个组织独立地寻求保护其各自在供应链的利益不受意外干扰是可以理解的,但不可取,因为这样做的结果影响了供应链的优化运行。
供应链的各个不同组织根据各自的需要独立运作,导致重复建立库存,因而无法达到供应链全局的最低成本,整个供应链系统的库存会随着供应链长度的增加而发生需求扭曲。
VMI库存管理系统就能够突破传统的条块分割的库存管理模式,以系统的、集成的管理思想进行库存管理,使供应链系统能够获得同步化的运作。
VMI是一种很好的供应链库存管理策略。
关于VMI的定义,国外有学者认为:"VMI 是一种在用户和供应商之间的合作性策略,以对双方来说都是最低的成本优化产品的可获性,在一个相互同意的目标框架下由供应商管理库存,这样的目标框架被经常性监督和修正,以产生一种连续改进的环境 "。
现代管理领域专业人才知识更新工程(653工程)公需科目论文论文题目: 供应商管理库存简析2009 年 12 月 30 日供应商管理库存简析供应商管理库存(Vendor managed inventory,VMI)就是供应商等上游企业基于其下游客户的生产经营、库存信息,对下游客户的库存进行管理与控制,库存存放在供应商的仓库里,随用随送。
VMI是一种在用户和供应商之间的合作性策略,以对双方来说都是最低的成本优化产品的可获性,在一个相互同意的目标框架下由供应商管理库存,这样的目标框架被经常性监督和修正,以产生一种连续改进的环境。
长期以来,传统供应链中的库存管理是各自为政的,其各个环节都是各自管理自己的库存。
零售商,批发商,供应商都有自己的库存,各个供应链环节都有自己的库存控制策略。
由于各自的库存控制策略不同,因此不可避免地产生需求的扭曲现象,即所谓的需求放大现象,无法使供应链快速地响应用户的需求。
供应商管理库存(VMI)这种新的供应链库存管理方法打破了传统的各自为政的库存管理模式,体现了供应链的集成化管理思想,适应市场要求,是一种有代表性的新库存管理思想。
VMI最引人注目的计划是使每个合伙人都能减少成本和改进服务。
由于需求的易变性,和不确定性,往往会导致零售商/制造商产品短缺,丧失客户的订单,同时为了响应客户服务的需求,要维持较高的生产能力和库存水平,这是一种高成本的方法。
同时供应商也不能得到准确地需求信息,同样也会维持高水平的库存,而VMI 能解决这个问题,缓和双方的冲突,使信息更透明,更畅通及时,同时也缓和了需求的不确定性,同时改善服务,提高客户满意度。
因此VMI的建立需要在合作伙伴关系,互惠,目标一致,相互信任,信息共享,持续改进等原则上,建立互信,公平的管理体系。
VMI具体实施步骤:1、建立客户情报信息系统。
供应商要有效的管理销售库存,供应商必须能够获得客户的有关信息。
通过建立顾客的信息库,供应商能够掌握需求变化的有关情况,把分销商/制造商的需求预测和分析功能集成到供应商的系统中来。
VMI资料介绍所谓VMI(Vendor Managed Inventory)是一种以用户和供应商双方都获得最低成本为目的,在一个共同的协议下由供应商管理库存,并不断监督协议执行情况和修正协议内容,使库存管理得到持续地改进的合作性策略。
这种库存管理策略打破了传统的各自为政的库存管理模式。
体现了供应链的集成化管理思想,适应市场变化的要求,是一种新的、有代表性的库存管理思想。
目前VMI在分销链中的作用十分重要,因此便被越来越多的人重视。
一、VMI基本信息对于供应商管理的库存(Vendor Managed Inventory; VMI),因为有最低与最高库存点,按时交货可通过相对库存水平来衡量。
例如库存为零,风险很高;库存低于最低点,风险相当高;库存高于最高点,断货风险很小但过期库存风险升高。
这样,统计上述各种情况可以衡量供应商的交货表现。
根据未来物料需求和供应商的供货计划,还可以预测库存点在未来的走势。
VMI管理模式是从QR(快速响应,Quick Response)和ECR(高效客户响应,Efficient Customer Response)基础上发展而来,其核心思想是供应商通过共享用户企业的当前库存和实际耗用数据,按照实际的消耗模型、消耗趋势和补货策略进行有实际根据的补货。
由此,交易双方都变革了传统的独立预测模式,尽最大可能地减少由于独立预测的不确定性导致的商流、物流和信息流的浪费,降低了供应链的总成本。
二、VMI管理模式特点1、信息共享零售商帮助供应商更有效地做出计划,供应商从零售商处获得销售点数据并使用该数据来协调其生产、库存活动与及零售商的实际销售活动;2、供应商拥有管理库存供应商完全管理和拥有库存,直到零售商将其售出为止,但是零售商对库存有看管义务,并对库存物品的损伤或损坏负责。
实施VMI有很多优点。
首先,供应商拥有库,对于零售商来说,可以省去多余的定货部门,使人工任务自动化,可以从过程中去除不必要的控制步骤,使库存成本更低,服务水平更高。
简述VMI实施的基本原则和具体步骤1. VMI的基本原则•Virtual Mobile Infrastructure (VMI)是一种通过将手机应用程序和数据移动到云服务器上,在云服务器上以虚拟机的形式运行,并通过网络将屏幕输出到移动设备上的解决方案。
•VMI的基本原则是实现移动设备的虚拟化,降低设备的复杂性和安全风险,并提供更好的用户体验和设备管理能力。
•VMI的基本原则包括:–虚拟化移动设备:将移动设备的应用程序和数据移动到云服务器上以虚拟机的形式运行。
–网络传输屏幕输出:通过网络将云服务器上的屏幕输出传输到移动设备上展示。
–设备无关性:VMI解决方案可以在不同的移动设备上运行,例如智能手机、平板电脑等。
–安全性和隐私保护:VMI解决方案需要提供高级的安全性和隐私保护功能,确保用户数据的保密性和完整性。
2. VMI实施的具体步骤VMI的实施涉及以下具体步骤:步骤一:需求分析和规划•确定实施VMI的目标和需求,包括用户数量、设备类型、需要虚拟化的应用程序和数据等。
•评估现有的网络和服务器设施,以确定是否需要进行升级或扩展。
•制定实施计划和时间表。
步骤二:准备服务器基础设施•部署和配置云服务器,确保服务器的性能和可靠性。
•部署服务器虚拟化软件,例如VMware、Citrix Hypervisor等。
•配置服务器网络和存储设备,确保有效的数据传输和存储能力。
步骤三:准备移动设备•配置移动设备的网络连接,确保设备可以访问云服务器。
•安装VMI客户端软件,用于接收和显示从云服务器传输的屏幕输出。
•配置客户端软件,以确保安全访问和数据传输。
步骤四:迁移应用程序和数据•识别需要虚拟化的应用程序和数据,并将其迁移至云服务器。
•进行必要的应用程序和数据的配置和测试,以确保其在云服务器上的正常运行。
•配置用户权限和访问控制,确保用户只能访问其所需的应用程序和数据。
步骤五:测试和优化•进行系统测试,并通过模拟用户负载来评估VMI系统的性能和稳定性。
简述vmi策略的原则
VMI(Virtual Machine Image)策略是一种将虚拟机镜像作为基础架构的一部分来管理的方法,它允许管理员通过创建一个虚拟镜像来自动化虚拟机的部署、扩展和管理。
VMI策略有许多原则,以下是其中一些主要的原则:
1. 可靠性:VMI策略确保虚拟机镜像的可靠性和稳定性。
在虚拟机镜像创建和部署过程中,需要考虑硬件、软件、网络等多个因素,以确保镜像的质量和可用性。
2. 灵活性:VMI策略允许管理员对虚拟机镜像进行灵活的配置和扩展。
管理员可以使用镜像来创建新的虚拟机、扩展虚拟机的能力或者改变虚拟机的功能和配置。
3. 可移植性:VMI策略需要确保虚拟机镜像的可移植性。
这意味着虚拟机镜像可以在不同的硬件、操作系统和网络环境中运行,而不需要重新配置或安装。
4. 安全性:VMI策略需要确保虚拟机镜像的安全性。
管理员需要确保镜像中包含的安全补丁和更新,并采取适当的安全措施来保护虚拟机镜像免受恶意攻击。
5. 可管理性:VMI策略需要确保管理员可以方便地管理虚拟机镜像。
管理员可以使用镜像来自动化虚拟机的部署、扩展和管理,从而提高管理效率和准确性。
6. 可测试性:VMI策略需要确保虚拟机镜像的可测试性。
管理员可以使用镜像来进行单元测试、集成测试和端到端测试,以确保虚拟机的稳定性和可靠性。
VMI策略是一种灵活、可靠、可移植、安全性高、可管理性和可测试性的管理方法,可以帮助管理员自动化虚拟机的部署、扩展和管理,从而提高管理效率和准确性。
配置管理系统VMI基础及扩展1. 前言 (3)1.1 关于本文档 (3)1.2 背景知识 (3)2. Odyssey框架结构 (3)3. 配置管理接口 (4)3.1 配置管理接口的必要性 (4)3.2 Conexant VMI配置管理接口 (4)4. VMI基础知识 (5)4.1 VMI基本概念 (5)4.2 VMI的目标 (5)4.3 配置如何工作 (5)4.4 了解VMI类 (7)4.5 类之间联系 (9)4.6 VMI管理接口 (10)4.7 VMI访问控制 (15)4.8 使用Generic interface接口 (16)4.9 VMI源代码组织 (17)5. VMI通用扩展步骤 (17)5.1 VMI通用扩展步骤 (17)5.2 与扩展相关的文件 (18)6. URL过滤功能VMI扩展支持 (18)6.1 VMI接口类设计 (18)6.2 VMI接口类定义 (19)6.3 VMI实现类代码编写 (20)6.4 CLI命令扩展 (24)Author严向阳(yanxy@)HistoryDate VersionChanges 28 May 2008 Draft A 完成第一稿1. 前言1.1 关于本文档本文档介绍VMI配置管理接口基础知识以及扩展方法,文中以URL过滤功能VMI扩展为例,描述了扩展的详细步骤。
1.2 背景知识在阅读该文档之前,建议读者具有如下知识:−C++基础知识另外,建议读者阅读过如下文档资料:−Odyssey Management Developer’s Guide−Odyssey Developer's Guide−Odyssey CLI Reference Manual−URL过滤功能实现指南2. Odyssey框架结构Odyssey是Conexant Linux平台的整体解决方案,具备完整的DSL软件架构。
Odyssey在Conexant Linux BSP基础上增加如下内容:¾VMI配置管理接口¾基于VMI的EmWeb,CLI,TR069¾移植自ISOS的应用程序:DHCP Server,FTP server,TFTP Server,DNS Relay,DDNS,SNTP等,这些应用程序按照ISOS应用程序模式开发,基于消息机制,与Linux应用程序有较大区别整个Odyssey框架结构如下:3. 配置管理接口3.1 配置管理接口的必要性¾Linux各应用程序和驱动具有自己的配置文件或配置方法,导致系统中各模块的管理方法不一¾这些配置文件或配置方法是相互孤立、分散的,当整个系统庞大的时候,这种分散状况会给系统的管理带来很大的不便¾需要提供统一的配置管理接口,使得上层管理软件的开发无需关注底层管理方法的细节¾配置管理接口处在软件层次结构的上层,考虑用高层程序语言(C++)实现¾配置管理接口的设计需要对各个系统元素(比如路由接口,桥接接口,各个PVC 等)进行抽象,以更好地适应网络管理协议趋向于面向对象的设计理念。
3.2 Conexant VMI配置管理接口VMI指Versatile Management Interface,是Conexant公司开发的一种配置管理软件,运行在Conexant公司的ISOS和Odyssey软件平台上。
VMI为各种配置管理工具提供统一的接口(API),后者借助VMI可以实现对CPE各项配置的管理。
4. VMI基础知识4.1 VMI基本概念¾对象(object)的概念:对象代表一种系统元素或实体,比如routes, IP interfaces, PPP sessions等¾所有这些对象以及这些对象之间关系组织成树状数据结构(Information Model)1)每个对象都属于一个类(class)2)类说明对象的类型(type)3)类指明用什么信息(attribute)描述对象以及可以对对象执行的操作(action)4)对象是类的一个实例(instance)5)对象又称节点(node)6)每个对象创建时都赋予一个名字4.2 VMI的目标¾VMI最主要目标是提供统一的、一致的接口(API)1)各软件模块通常导出自身的API接口,这些接口互不统一,与各自模块实现功能密切相关2)下层软件模块的实现也时常发生变化¾管理工具运行强调稳定性1)管理工具是一种用于配置系统的软件,比如CLI,Web Server等2)管理工具基于配置接口开发:如果配置接口具有一致性,管理工具的开发和维护将变得容易3)下层软件模块实现发生变化时,管理工具开发仍然基于配置接口VMI满足了上述需求。
4.3 配置如何工作下图展示了VMI与上下层之间的关系:假设Web Server 需要在dnsrelay 模块中添加一个新的DNS server 地址。
透过VMI 的配置工作过程是:1. Web Server 创建一个对象...2. 修改一些属性(attribute)...3. 将对象插入适当位置4. 对象本身呼叫dnsrelay 的修改相关配置4.4 了解VMI类这里介绍Information Model类,以ImIpInterface为例。
ImIpInterface类代表TCP/IP协议栈的一个配置接口。
“Im”标识Information Model类(在UML图例中,不显示“Im”前缀)。
类名称需要注意的是,每个属性(attribute)都隐含了一对get_xxx()和set_xxx()操作函数(只读属性除外)。
下面列举了定义ImIpInterface类的定义代码。
4.5 类之间联系单类(Singleton class):上述“Root”类称为单类。
单类对象由启动时VMI自动创建,除非相关的软件模块没有编译,单类对象将一直存在在系统中。
识别单类的方法是在类的定义中有instance()方法函数。
组类(Collection class):组类总是以复数形式命名,并且包含三个方法函数,add(),remove(),find()。
组类的一个对象实例有一组子类的对象实例组成。
VMI中任何类如果没有create()方法函数,系统将自动创建该类的对象。
VMI类之间也有继承关系。
比如,ImBridgeInterface类代表bridge的一个接口,该类继承自ImLayer2SessionUser基类。
又比如,ImIpInterface代表TCP/IP协议栈的一个配置接口,它也继承自ImLayer2SessionUser基类。
ImLayer2SessionUser基类含有公用的方法函数,如attachLayer2(),用于将connection (如ethernet connection)绑定(attach)。
所以,ImBridgeInterface类和ImIpInterface类都可以利用该方法函数实现connection绑定。
这里列举一些类继承的例子:由上述类继承关系,我们可以方便的绑定一个connection到桥或者IP接口,因为ImLayer2Session可以绑定(attach)给ImLayer2SessionUser由于类之间继承关系,VMI中的许多对象具有多个类类型,每个类可以配置对象的特定方面信息。
如果有了指向该对象的指针,使用C++的动态类型转换dynamic_cast运算符可以“浏览”对象所具有的所有类型类。
比如,下面代码设置IP interface的IP地址(使用类ImIpInterface方法函数),然后enable(使用ImLayer2SessionUser类的方法函数)Environment env;ImIpInterface *ip = ImIpInterface::create(&env, “myIface”);ImLayer2SessionUser *l2su =dynamic_cast<ImLayer2SessionUser*>(ip);if (l2su) {l2su->enable(&env);}dynamic_cast运算符失败返回0。
可以使用它测试对象支持哪些类接口。
4.6 VMI管理接口VMI管理接口(MAPI)有两种接口组成:Generic interface和Type-Safe C++ interface。
interface接口使用ImManaged类访问所有对象:Generic¾所有VMI类均继承自ImManaged类,因此,ImManaged类可以管理所有的对象¾访问属性(attribute)只需提供属性名字的字符串¾避免写大量代码处理不同类型的对象¾缺点是:编译时难以发现错误,调试追踪bug需要花费更多时间Type-Safe C++ interface接口提供类型安全的C++类接口:¾每个对象根据对象的类型进行访问¾在适当的地方使用该接口,可以获得更多的代码错误信息¾一般情况下,使用Type-Safe C++ interface接口的代码也可以替换使用GenericInterface实现事实上,VMI的管理接口主要是一些类,并非一般的函数。
以“Im”打头的类均为接口类。
这些类仅仅定义必要的接口方法函数,没有实现代码,所以只是定义在头文件中(这些头文件在source\cnxt-src\NM\vmi\im\interfaces\im目录下)。
在C++中这些类称为抽象基类。
与接口类对应的无“Im”打头的类是实现类,用来真正实现方法函数。
类定义和实现分离是为了将实现代码单独分出来,以方便将来实现代码的修改。
例如,对应ImIpInterface 接口类的实现代码在IpInterface类中,实例代码如下。
using namespace isos;using namespace im;using namespace im_error;namespace im{class IpInterface: public Layer2SessionUser, public ImIpInterface,public ImAttributeOwner{// Denotes the version 4 IP address of this IP interfaceipV4Addr ipaddr_;// Subnet mask for this interfaceipV4Addr mask_;// Flag denoting whether or not this IP interface obtains configuration// parameters from DHCPbool dhcp_;// Denotes that Maximum Transmission Unit for this IP interfaceint mtu_;public:virtual ~IpInterface();IpInterface();......// Denotes the version 4 IP address of this IP interfaceipV4Addr get_ipaddr(Environment *e) const;void set_ipaddr( Environment *e, ipV4Addr ipaddr );// Subnet mask for this interfaceipV4Addr get_mask(Environment *e) const;void set_mask( Environment *e, ipV4Addr mask );// Flag denoting whether or not this IP interface obtains configuration// parameters from DHCPbool get_dhcp(Environment *e) const;void set_dhcp( Environment *e, bool dhcp );// Denotes that Maximum Transmission Unit for this IP interface//int get_mtu(Environment *e) const;void set_mtu( Environment *e, int mtu );......};}// Denotes the version 4 IP address of this IP interfaceipV4Addr IpInterface::get_ipaddr(Environment *e) const{LOG_ENTRY();EnterGet method(e,this);if ( ifid_ != LIH_API && get_ipstack() != NULL ){t_IPSTACKIfConfig ifConfig;ifConfig.ifIndex = ifid_;int rc = IPSTACK_IfConfig(get_ipstack(), 0, IPSTACK_IFCFG_READ, &ifConfig);if (rc == E_OK)return ifConfig.ipaddr;}return ipaddr_;}void IpInterface::set_ipaddr( Environment *e, ipV4Addr ipaddr ){LOG_ENTRY();EnterSet method(e,this);ipaddrAutoConfigured_ = !e->isManualConfig();if ( ipaddr != ipaddr_ ){IP AddrString str;im_syslog(IM_LOG_INFO,"Changed %s IP address to %s\n", ident(),ipaddr.asString(str));}ipaddr_ = ipaddr;if( mask_ == 0 ){// initialise mask_ to the natural subnet maskfind_natural_subnet_mask((IP ADDR*)&ipaddr_,(IP ADDR*)&mask_);}}// set the subnet mask usedvoid IpInterface::set_mask( Environment *e, ipV4Addr mask ){LOG_ENTRY();EnterSet method(e,this);mask_ = mask;}ipV4Addr IpInterface::get_mask(Environment *e) const{LOG_ENTRY();EnterGet method(e,this);if (ifid_ != LIH_API && get_ipstack() != NULL){t_IPSTACKIfConfig ifConfig;ifConfig.ifIndex = ifid_;int rc = IPSTACK_IfConfig(get_ipstack(), 0, IPSTACK_IFCFG_READ, &ifConfig);if (rc == E_OK)return ifConfig.mask;}return mask_;}// Flag denoting whether or not this IP interface obtains configuration// parameters from DHCPbool IpInterface::get_dhcp(Environment *e) const{LOG_ENTRY();EnterGet method(e,this);return dhcp_;}void IpInterface::set_dhcp( Environment *e, bool dhcp ){LOG_ENTRY();EnterImmediateSet method(e,this);if ( dhcp != dhcp_ ){ImEnactable::markForEnact(ImDhcpClient::instance());dhcp_ = dhcp;//Clear ALL the DNS servers received on this interface by DHCPdo_clear_dns_servers(e,ifid_);if ( ifid_ != LIH_API && get_ipstack() != NULL){int rc = IPSTACK_SetDHCP(get_ipstack(), ifid_, dhcp_);if (rc != E_OK)e->fail(this, "Failed to update DHCP flag");}}}// Denotes the Maximum Transmission Unit for this IP interface//int IpInterface::get_mtu(Environment *e) const{LOG_ENTRY();EnterGet method(e,this);if ( ifid_ != LIH_API && get_ipstack() != NULL ){t_IPSTACKIfConfig ifConfig;ifConfig.ifIndex = ifid_;int rc = IPSTACK_IfConfig(get_ipstack(), 0, IPSTACK_IFCFG_READ, &ifConfig);if (rc == E_OK)return ifConfig.mtu;}return mtu_;}void IpInterface::set_mtu( Environment *e, int mtu ){LOG_ENTRY();EnterImmediateSet method(e,this);// Don't change MTU on virtual interfacesif (realInterface_.size() > 0)return;mtu_ = mtu;ImLayer2Session *sess = getLayer2(e);if (sess != NULL){const Payload* payload = &sess->payload();int overhead = payload->encapOverhead();if (overhead !=0 && (mtu > (1500 - overhead)))mtu_ = 1500 - overhead;}if ( ifid_ != LIH_API && get_ipstack() != NULL){int rc = IPSTACK_SetMTU(get_ipstack(), ifid_, mtu_);if ( rc != E_OK )e->fail(this, "Failed to update mtu");}}// Describe this class - in particular how to create it, and where to// look for its attributesISOS_CLASS_DEF(IpInterface);ISOS_INHERIT_FROM(IpInterface,Layer2SessionUser);// For each attribute, describe its name, type, etc.ISOS_ATTRIBUTE_DEF(IpInterface,ipV4Addr,ipaddr);ISOS_ATTRIBUTE_DEF(IpInterface,ipV4Addr,mask);ISOS_ATTRIBUTE_DEF(IpInterface,bool,dhcp);ISOS_ATTRIBUTE_DEF(IpInterface,int,mtu);4.7 VMI访问控制VMI提供一些支持类方便管理工具开发使用。