精华内容
下载资源
问答
  • APSffi化算法的魅力案例分析 APSSW级计划与排程协会 SAPS Lean System Advanced Planning and Scheduling 精益系统高级计划排程是基于现实的资源能力时间产品约束条件逻辑关系等 有限资源能力情况得到一个可实施的...
  • 文章目录工厂模式简单工厂案例优化一 抽离方法优化二 抽离成类优化三 map工厂方法业务中使用枚举方案-->(工厂中的工厂)抽象工厂优缺点简单工厂、工厂方法、抽象工厂的区别框架中的工厂模式 工厂模式 工厂模式分为...

    工厂模式

    工厂模式分为三种更加细分的类型:简单工厂、工厂方法和抽象工厂,其中简单工厂、工厂方法在实际的项目中也比较常用。属于创建型

    简单工厂

    简单工厂是产品的工厂

    简单工厂是将逻辑条件放入工厂内部中并生产产品
    在这里插入图片描述

    案例

    在下面这段代码中,我们根据配置文件的后缀(json、xml、yaml、properties),选择不 同的解析器(JsonRuleConfigParser、XmlRuleConfigParser…),将存储在文件中的 配置解析成内存对象 RuleConfig。

    public class RuleConfigSource {
    
        public RuleConfig load(String ruleConfigFilePath) {
    
            String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
            IRuleConfigParser parser = null;
            if ("json".equalsIgnoreCase(ruleConfigFileExtension)) {
                parser = new JsonRuleConfigParser();
            } else if ("xml".equalsIgnoreCase(ruleConfigFileExtension)) {
                parser = new XmlRuleConfigParser();
            } else if ("yaml".equalsIgnoreCase(ruleConfigFileExtension)){
                parser = new YamlRuleConfigParser();
            } else if ("properties".equalsIgnoreCase(ruleConfigFileExtension)){
                parser = new PropertiesRuleConfigParser();
            } else {
                throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
            }
            
            String configText = "";
            //从ruleConfigFilePath文件中读取配置文本到configText中
            RuleConfig ruleConfig = parser.parse(configText);
            return ruleConfig;
        }
        
        private String getFileExtension(String filePath) {
            //...解析文件名获取扩展名,比如rule.json,返回json
            return "json";
        }
    }
    

    优化一 抽离方法

    上述代码逻辑不清晰,我们要将相对独立的代码封装成函数,将parser抽离出来

    public RuleConfig load(String ruleConfigFilePath) {
        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        IRuleConfigParser parser = createParser(ruleConfigFileExtension);
        if(parser == null) {
            throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
        }
        
        ... 省略其他方法
        
        //封装成一个方法
        private IRuleConfigParser createParser(String configFormat) {
            IRuleConfigParser parser = null;
            if ("json".equalsIgnoreCase(configFormat)) {
                parser = new JsonRuleConfigParser();
            }else if ("xml".equalsIgnoreCase(configFormat)) {
                parser = new XmlRuleConfigParser();
            }else if ("yaml".equalsIgnoreCase(configFormat)){
                parser = new YamlRuleConfigParser();
            }else if ("properties".equalsIgnoreCase(configFormat)){
                parser = new PropertiesRuleConfigParser();
            }
            return parser;
    }
    

    优化二 抽离成类

    • 让类的职责更加单一、代码更加清晰
    public RuleConfig load(String ruleConfigFilePath) {
        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        //调用工厂方法
        IRuleConfigParser parser = RuleConfigParserFactory.createParser(ruleConfigFileExtension);
        if(parser == null) {
            throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
        }
        
        ... 省略其他方法
       
    }
    
    //工厂类
    public class RuleConfigParserFactory { 
        //封装成一个方法
        public IRuleConfigParser createParser(String configFormat) {
            IRuleConfigParser parser = null;
            if ("json".equalsIgnoreCase(configFormat)) {
                parser = new JsonRuleConfigParser();
            }else if ("xml".equalsIgnoreCase(configFormat)) {
                parser = new XmlRuleConfigParser();
            }else if ("yaml".equalsIgnoreCase(configFormat)){
                parser = new YamlRuleConfigParser();
            }else if ("properties".equalsIgnoreCase(configFormat)){
                parser = new PropertiesRuleConfigParser();
            }
            return parser;
    }
    
    • 注意类名和方法名,大部分工厂类都是以“Factory”这个单词结尾,工厂类中创建对象的方法一般都是 create 开头

    优化三 map

    去if 使用map

    //工厂类
    public class RuleConfigParserFactory {
        private static final Map<String, RuleConfigParser> cachedParsers = new HashMap();
        
        static{
            cachedParsers.put("json", new JsonRuleConfigParser());
            cachedParsers.put("xml", new XmlRuleConfigParser());
            cachedParsers.put("yaml", new YamlRuleConfigParser());
            cachedParsers.put("properties", new PropertiesRuleConfigParser());
        }
        
        public static IRuleConfigParser createParser(String configFormat) {
            if (configFormat == null || configFormat.isEmpty()) {
                return null;//返回null还是IllegalArgumentException全凭你自己说了算
            }
            IRuleConfigParser parser = cachedParsers.get(configFormat.toLowerCase());
            return parser;
            
        }
    }
    
    

    工厂方法

    工厂的工厂

    • 工厂方法是将逻辑条件交给客户端,并应用到继承和多态

    在这里插入图片描述

    // 定义创建解析器接口
    public interface IRuleConfigParserFactory {
        IRuleConfigParser createParser();
    }
    // json实现
    public class JsonRuleConfigParserFactory implements RuleConfigParserFactory {
    
        @Override
        public IRuleConfigParser createParser() {
            return new JsonRuleConfigParser();
        }
    }
    // xml实现
    public class XmlRuleConfigParserFactory implements IRuleConfigParserFactory {
        @Override
        public IRuleConfigParser createParser() {
            return new XmlRuleConfigParser();
        }
    }
    
    // yaml实现
    public class YamlRuleConfigParserFactory implements IRuleConfigParserFactory {
        @Override
        public IRuleConfigParser createParser() {
            return new YamlRuleConfigParser();
        }
    }
    
    // properties实现
    public class PropertiesRuleConfigParserFactory implements IRuleConfigParserFactory{
        @Override
        public IRuleConfigParser createParser() {
            return new PropertiesRuleConfigParser();
        }
    }
    

    业务中使用

    public class RuleConfigSource {
        
        public RuleConfig load(String ruleConfigFilePath) {
            String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
            IRuleConfigParserFactory parserFactory = null;
            if ("json".equalsIgnoreCase(ruleConfigFileExtension)) {
                parserFactory = new JsonRuleConfigParserFactory();
            }else if ("xml".equalsIgnoreCase(ruleConfigFileExtension)) {
                parserFactory = new XmlRuleConfigParserFactory();
            }else if ("yaml".equalsIgnoreCase(ruleConfigFileExtension)) {
                parserFactory = new YamlRuleConfigParserFactory();
            }else if ("properties".equalsIgnoreCase(ruleConfigFileExtension)){
                parserFactory = new PropertiesRuleConfigParserFactory();
            }else {
                throw new InvalidRuleConfigException("Rule config file format is not supported: " + ruleConfigFilePath);
            }
            
            IRuleConfigParser parser = parserFactory.createParser();
            
            String configText = "";
            //从ruleConfigFilePath文件中读取配置文本到configText中
            RuleConfig ruleConfig = parser.parse(configText);
            return ruleConfig;
        }
        
        private String getFileExtension(String filePath) {
            //...解析文件名获取扩展名,比如rule.json,返回json
            return "json";
        }
    }
    
    • 还是嵌套了很多if,并耦合了,如果新增一个php后缀的信息则需要修改load中的方法。那如何使其优雅呢?

    枚举方案–>(工厂中的工厂)

    与简单工厂中的map方案类似 但操作更骚

    //工厂枚举
    public enum RuleConfigParserFactoryEnum {
    
        /**
         * 定义具体工厂
         */
        JSON("json", new JsonRuleConfigParserFactory()),
        XML("xml", new XmlRuleConfigParserFactory()),
        YAML("yaml", new YamlRuleConfigParserFactory()),
        PROPERTIES("properties", new PropertiesRuleConfigParserFactory());
    
        RuleConfigParserFactoryEnum(String key, IRuleConfigParserFactory ruleConfigParserFactory) {
            this.key = key;
            this.ruleConfigParserFactory = ruleConfigParserFactory;
        }
        // 为试代码可读性高 这里使用的是key 而非type
        private String key;
        private IRuleConfigParserFactory ruleConfigParserFactory;
    
        public String getKey() {
            return key;
        }
    
        /**
         * 获取工厂
         * @param type
         * @return
         */
        public static IRuleConfigParserFactory getParserFactory(@NonNull String type) {
    
            for (RuleConfigParserFactoryEnum ruleConfigParserFactoryEnum : RuleConfigParserFactoryEnum.values()) {
                if(ruleConfigParserFactoryEnum.key.equals(type)){
                    return ruleConfigParserFactoryEnum.ruleConfigParserFactory;
                }
            }
            return null;
        }
    }
    

    优点: 如果增加一种解析那么只需要增加对应的工厂类及工厂枚举中的常量而不用修改业务逻辑.基本上符合开闭原则

    缺点: 对于某些可以形成产品族的情况处理比较复杂。

    抽象工厂

    在这里插入图片描述
    抽象工厂模式的应用场景比较特殊,没有前两种常用。所以不展开讲。抽象工厂可以让一个工厂负责创建多个不同类型的对象,比如以上场景:如果我们未来在规则配置解析的基础上还要增加一种系统配置解析,那么出现两种IRuleConfigParser和ISystemConfigParser

    public interface IConfigParserFactory {
        IRuleConfigParser createRuleParser();
        ISystemConfigParser createSystemParser();
        
    }
    
    public class JsonConfigParserFactory implements IConfigParserFactory {
    
        // 规则配置解析(原有)
        @Override
        public IRuleConfigParser createRuleParser() {
            return new JsonRuleConfigParser();
        }
        // 系统配置解析
        @Override
        public ISystemConfigParser createSystemParser() {
            return new JsonSystemConfigParser();
        }
    }
    
    

    如果后续还要加入IBizConfigParser,并不需要增加对应的工厂,直接在IConfigParserFactory工厂中加入其产品就可以。

    优缺点

    • 缺点: 如果新增产品,那么会导致动一发而牵全身。所以工厂模式适用不经常改动且比较复杂、重复代码较多的场景
    • 优点: 高聚合、使用者无需关心内部实现逻辑、符合开闭原则。

    简单工厂、工厂方法、抽象工厂的区别

    • 简单工厂接受了一个参数,通过不同的参数实例化不同的产品类。

    用来生产同一等级结构中的任意产品。(不支持拓展增加产品)

    • 工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实类来创建不同的产品实例。(支持拓展增加产品)

    用来生产同一等级结构中的固定产品。(支持拓展增加产品)

    • 抽象工厂是应对产品族概念的。工厂方法模式是一种极端情况的抽象工厂模式(即只生产一种产品的抽象工厂模式),而抽象工厂模式可以看成是工厂方法模式的一种推广。(不支持拓展增加产品;支持增加产品族)

    用来生产不同产品族的全部产品。(支持增加产品族)

    框架中的工厂模式

    BeanFactory/LoggerFactory

    展开全文
  • 核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、...
  • 核心原理与案例分析》通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、...
  • 具有多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使您能专注于应用开发和业务发展。 一、双机热备 1、每台RDS拥有两个物理节点进行主从热备 2、主节点发生故障,秒级切换至...

    阿里云关系型数据库RDS可用性分析与案例

    关系型数据库服务(Relational Database Service,简称RDS)是一种即开即用、稳定可靠、可弹性伸缩的在线数据库服务。具有多重安全防护措施和完善的性能监控体系,并提供专业的数据库备份、恢复及优化方案,使您能专注于应用开发和业务发展。

    一、双机热备

    1、每台RDS拥有两个物理节点进行主从热备

    2、主节点发生故障,秒级切换至备节点

    3、服务可用性高达99.95%

    4、安全防护自定义访问IP白名单

    5、防DDoS攻击,SQL注入告警多重备份,数据可靠性高达99.9999%

    二、简单易用

    1、完全兼容MySQL,SQL Server协议

    2、一键式数据迁移

    3、可视化管理面板操作

    4、开放结构化数据OTS

    开放结构化数据服务(Open Table Service,OTS)是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实时访问

    产品功能OTS帮您轻松应对海量数据的存储及线上的实时读写

    5、数据的海量存储

    6、支持互联网应用用于服务海量的终端用户,如存储邮件,日记,行程,用户信息等。也可用于大规模对象数据的存储,应对移动互联网及物联网带来的数据存储挑战。

    7、表的管理

    用户可对某实例下,进行创建表、查询表、删除表等多种操作。

    8、数据的管理

    数据的单行读写、多行读写以及范围读取。

    三、案例

    1、施耐德电器

    施耐德电气作为世界500强企业之一,在170多年的发展历程中,不断开拓进取,积极创新,现在已经成长为全球能效管理专家。自1987年在天津成立第一家合资厂,施耐德电气在中国已走过20余年的历程。对于海量数据的存储和复杂数据的精密分析需求高,且需基于非关系型数据进行,对硬件的弹性扩容要求高。

    施耐德电气基于云服务器、开放结构化数据服务(OTS)、开放数据处理服务(ODPS),开发远程能源管理系统(REM), 面向楼宇、厂房、酒店、医院、电信等全球行业客户提供灵活扩展、按需付费的远程海量能源数据采集、存储、分析及咨询服务。施耐德REM远程能源管理平台利用阿里云弹性计算的优势,通过智能电表加网关的模式采集客户用能数据,并远程集中存储在OTS中,使用ODPS进行计算,向企业提供用能统计、用能分析,能耗报警、能源建模及节能咨询等远程能源管理服务,利用能源即服务(EaaS)的新型能源管理服务模式,降低客户初始投资,提高能源使用效率,实现节能减排的目标。

    2、够快

    够快是全球领先的团队文件共享解决方案第三方服务提供商。提供文档协作、共享及统一管理的服务。使用“够快云库”可以构建统一有序的文件知识管理体系,积累团队智慧,提高工作效率。急需解决海量的存储量需求使服务器成本过高,人工维护使成本与服务器稳定性无法有效保障与提高。

    够快产品将完整的数据服务和应用服务构筑在阿里云平台上,所有的网站和API服务均使用了阿里云的弹性计算,用户的所有数据将存放在阿里云的OSS上,用户的索引文件则是存放在阿里云的OTS上。同时也将推出用户可以将数据存放在自己的OSS平台上的服务。

    够快反馈:阿里云提供了一个非常简单而方便的整体的服务解决平台,我们作为一个服务型的云存储平台使用了阿里云提供的基础云存储平台,有效的提高了我们的服务质量,同时也大大的节省了我们维护的成本,包括物质和精神上的成本。同时配合弹性计算取代了原有的托管主机,用OTS取代了MangoDB,这大大提高了我们整体服务的稳定性和可用性。

     

    展开全文
  • 核心原理与案例分析通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web ...
  • 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能优化、Web安全、系统发布...
  • 工业互联网 基于 5G 和人工智能产品质量检测方案 目 录 概述 1 需求分析 3 解决方案 10 成功案例 16 基于 5G 和人工智能技术的产品质量实时检测和优化方案 概述 背景 产品质量是企业的生命如何提高产品质量的检测...
  • 成功案例16 基于 5G 和人工智能技术的产品质量实时检测和优化方案 1 概述 1.1 背景 产品质量是企业的生命如何提高产品质量的检测效率和检测精度是企业 一直关注的重点当前产品质量缺陷的检测技术例如汽车零部件齿轮...
  • 摘自:...一个实际 ESB 项目实施的成败,不仅要求我们把产品用熟用好,即熟悉 ESB 产品的配置、开发及优化操作,还需要制定正确的、量体裁衣式的解决方案,并且需要借助科学的项目实
    摘自:http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0905_loulj_esb1/index.html 




    前言 

    一个实际 ESB 项目实施的成败,不仅要求我们把产品用熟用好,即熟悉 ESB 产品的配置、开发及优化操作,还需要制定正确的、量体裁衣式的解决方案,并且需要借助科学的项目实施方法论,从需求分析、方案设计、产品开发、测试、上线运行等各个方面进行全面的考虑。本系列文章将分为三部分,第 1 部分和第 2 部分将结合两个不同行业的案例来介绍两个具有鲜明行业特点的 ESB 解决方案,第 3 部分则将针对 ESB 项目的实施过程给出一些建议。 


    -------------------------------------------------------------------------------- 
    回页首 
    航空公司 ESB 案例解析 

    通过企业服务总线、接口适配器、服务注册管理等整合技术,实现将企业内部现有的各应用系统之间的信息共享,提高企业内部应用系统的数据共享和交换效率,提升企业在市场上的综合竞争力和客户服务质量,是所有企业的一个典型需求。本文将以航空公司的案例为基础,说明采用 IBM ESB 相关产品整合航空公司电子商务、常旅客、航班动态、呼叫中心等系统的解决方案。 


    -------------------------------------------------------------------------------- 
    回页首 
    航空公司 ESB 的需求举例 

    与其他行业一样,在民航业,国际和国内的主要航空公司内部也分布着众多已建和在建的用以支撑业务运行的 IT 系统,这些系统之间缺乏对信息共享性、系统兼容性和接口标准规范的统一考虑,造成系统之间的连接比较困难,应用和数据无法得到全面共享,系统间“蜘蛛网状”的连接普遍存在。随着新系统的不断建设,在业务与流程方面的整合将会因系统和业务领域间的信息沟通障碍而面临越来越多的困难,对航空公司的整体发展战略带来制约。 

    下面我们就来列举几个民航业的现状,以此说明对企业进行业务整合的必要性。 

    现状一:业务系统间数据共享需求强烈 

    总体来看,航空公司的 IT 分为商务、航务、机务和管控四大体系,其中商务体系中包括定座系统、电子客票销售系统、离港系统、电子商务系统、常旅客系统、大客户系统、呼叫中心系统、运价收益管理系统、地面服务系统等。在这个庞大的体系结构中,存在着巨大的系统间数据集成和共享的需求。主要存在以下三类信息的共享: 

    航班数据共享: 

    航班数据包括航班计划、航班动态、飞机参数等数据,是保障航空公司正常运营的最基本信息,而航空公司内部通常都会有超过 10 个的系统需要获取航班数据,其中包括:电子商务系统、呼叫中心系统、常旅客系统、地服系统、联盟成员系统等。目前,航班数据的源数据系统 ( 一般来自航空公司运控 AOC 系统 ) 与其他业务系统之间的数据交换和共享都是通过点对点单独开发接口的形式实现的,比如通过数据库视图的紧耦合的方式实现,这在增加各个系统接口复杂性的同时也增加了系统开发的周期和费用,而且各业务系统无法从统一的渠道获取航班数据,造成了各业务系统之间数据不一致,如下图所示: 


    图 1. 航空公司航班数据共享 

     
    客户主数据共享: 

    根据不同的直销、分销渠道以及不同的客户属性,航空公司的客户信息通常被分散地存储在多个不同的客户服务系统中,其中包括常旅客系统、大客户系统、电子商务系统等,这些现有系统或多或少地通过点到点的星型结构的接口方式进行了一些互连,在一定程度上实现了客户数据共享,但是仍普遍存在连接混乱、各系统间数据更新频率不一致、各系统内同一旅客基本信息不统一等问题,借鉴其他行业在客户主数据管理方面的发展趋势和最佳实践,因此航空公司需要对客户主数据进行统一存储和一致性管理,这就需要完成呼叫中心、电子商务、大客户、常旅客等系统与客户主数据系统之间的集成,希望通过 ESB 技术实现上述系统间数据的实时同步,如下图所示: 


    图 2. 航空公司客户数据共享 

     
    客票销售和客户服务信息共享: 

    在航空公司的直销渠道中,电子商务与呼叫中心是非常重要的两大直销渠道,各自拥有独立的业务支持系统,以这两个系统为例,国内各个航空公司拥有的电子商务与呼叫中心这两个应用系统之间后台基本没有任何数据共享,在业务和应用上完全独立,如下图: 


    图 3. 呼叫中心和电子商务系统渠道分离 

     
    而实际上这两个系统之间存在着非常多的来自业务的数据共享需求。例如:当客户在互连网上完成了全部订座功能,希望能够在呼叫中心完成改期升舱、退票退款等操作;而如果客户在呼叫中心渠道上完成了全部订座功能,或者在呼叫中心完成改期升舱、退票、退款操作后,也希望能够在互连网上进行状态查询,如下图所示: 


    图 4. 呼叫中心和电子商务系统间数据共享 

     
    因此这两个系统希望共享客票销售数据、客票服务数据 ( 对于升舱、改期、退票、退款、订单追踪、邮寄行程单等客票服务流程的相关数据 ) 以及销售业绩管理等进行共享,从而实现航空公司的两大直销渠道之间在销售与服务流程上的统一和客户体验的统一,增加客户满意度和客户服务水平。 

    现状二:缺乏技术先进的、统一的、标准的 IT 集成架构 

    在以往各个系统的建设当中,都是采用传统的点对点的联接方式,导致了一个复杂的网状结构,其弊端在于系统接口众多,系统间造成密切的耦合性,某一个系统接口的修改导致其他所有系统的修改;系统没有扩展性,每新增一个系统就需要开发该系统和其他相关所有系统的接口;系统的后期维护成本过高。没有建立起统一的数据交换平台和数据交换标准。各系统之间根据自己的需要获取数据,存在着格式上、内容上、或者统计口径上的差异。 

    以航空公司电子商务系统为例,电子商务系统与周边业务系统的集成需求如下: 

    图 5. 航空公司电子商务与外围系统集成举例 


    上表中,我们粗略列举了航空公司电子商务系统与其各主要相关系统间交换的业务数据内容,以及通讯协议和数据格式,我们可以看出其复杂性,如果没有一个统一的集成平台的支撑,那么数据格式转换、通讯适配器的开发、传输可靠性保证等问题都需要依赖于自主开发,其风险是不言而喻的。 


    -------------------------------------------------------------------------------- 
    回页首 
    航空公司商务体系 ESB 整合方案 

    总体方案概述 

    SOA (面向服务的架构)是当今国外各大航空公司率先考虑的方法论并成为提升下一代提升航空运输服务的能力引擎,它使 IT 部门可以搭建灵活的可配置体系以支持随需应变的航空业务。鉴于航空公司商务体系建设中存在的这些问题,以及业界的最佳实践,我们提出采用 ESB 整合航空公司的商务体系,其总体架构如下图所示: 


    图 6. 航空公司商务体系集成架构 

     
    总体系统架构主要由展现层、核心应用层和 SOA 核心能力层组成,其中通过门户实现统一用户接入,该模块主要包含用户帐户信息管理和存储、用户登录身份认证和访问请求负载均衡等部分。核心应用层包括电子商务系统、呼叫中心系统、常旅客系统、大客户系统等商务体系中的所有重要的业务系统。SOA 核心能力层由企业服务总线、服务管理和注册库以及组合服务运行引擎三部分组成。其中,企业服务总线 (ESB) 是 SOA 核心能力层的一个中心组件,它负责接入各种服务资源,通过采用统一服务接口使得各种服务或应用与服务之间可以相互方便访问,以星形结构替代了原来各服务之间的点对点结构,极大地优化了系统连接架构,降低了系统集成的复杂度。企业服务总线下方连入的各个应用系统是航空公司内部的各个业务系统,而右边是要连接的一些外部系统。组合服务运行引擎通常运行在标准的流程引擎之上,例如 BPEL 流程引擎,不是本文的重点,在此就不再赘述了。 

    ESB 的组件及产品映射模型 

    ESB 组件模型及产品映射模型如图 7: 

    图 7. 航空公司 ESB 组件模型 

     
    其中包括 ESB 组件、服务注册和管理组件以及 ESB 的监控和管理组件 3 部分组成。 

    ESB 组件: 

    实现消息传递、服务路由、格式转换、交易完整性保证、数据解析和处理、安全传输、应用适配、协议转换等功能,可以由 WebSphere Message Broker 实现。 

    服务注册和管理: 

    为 ESB 提供服务管理容器,借助科学的方法论,对航空公司的业务需求进行分析,对其商务体系的业务流程进行梳理,建立起航空公司商务体系的服务目录和服务库,对这些服务以及服务的元数据进行定义和存储,以便进行服务的查找、发布、注册和管理。该组件可以由 WebSphere Service Registry and Repository(WSRR)来实现,将所暴露的服务注册在 WSRR 中,便于其他系统发现和调用。 

    ESB 监控和管理: 

    ESB 是应用集成的枢纽,各个应用之间的信息和服务共享都将通过 ESB 来进行,因此,ESB 平台本身的监控和管理的重要性是不言而喻的。全面、及时的服务监控功能除了能够辅助快捷的故障诊断,还能够提供完整的服务质量评估报告,以衡量现有的应用系统效率,并为优化、升级提供指导。服务监控需要包括服务、操作等级别的调用 / 失败次数、响应时间等信息,并且在超过设定值的情况下能够报警。该组件由 Tivoli Omegamon XE for Messaging 实现,Tivoli Omegamon XE for Messaging 能够实现对 IBM WebSphere Message Broker 以及底层 MQ 的资源的自动发现并进行自动监控,帮助管理员及时发现故障和故障隐患。 

    组件交互模型 

    以前面描述的电子商务系统和呼叫中心之间的订单交互为例,其组件交互模型如下: 

    图 8. 航空公司 ESB 组件交互模型 

     
    该模型描述了客户在呼叫中心预定了机票(产生订单),然后通过电子商务 (B2C) 系统修改订单时通过 ESB 实现系统间订单交互的场景。 

    ESB 的接口设计 


    图 9. 航空公司 ESB 接口设计 

     

    在上图中,我们给出了某航空公司的一个示例。在这个例子中,我们看到其电子商务系统、航班信息发布系统、客户主数据系统都是采用 Web Service/ 实时 /XML 接口;呼叫中心采用 socket/实时/文本、WebService/实时/XML 接口;常旅客系统采用 FTP/批量/ 文本、WebService/实时/XML 的接口;大客户系统采用 Database 的接口形式。 

    基于接口的数据格式的不同,与 ESB 相关的系统可以分为以下两类: 

    基于 XML 报文的应用系统:基于 XML 报文交互是比较理想的方式,是目前业界较为推荐的标准方式。需要说明的是,尽管都采用 XML 标准,由于各个系统的需求的差别已经建设周期的不同,不同的应用系统采用的 XML 消息很难完全兼容。这需要由 ESB 实现相应的转换。 

    基于专有报文/自定义报文的应用系统:基于专有报文的应用系统,如国内的定座系统,可以先保留现有的报文格式,由 ESB 实现现有格式与其他报文格式以及 XML 格式之间的转换。随着未来条件的成熟,这些系统逐步过度到通过 XML 实现与 ESB 以及其他应用系统的集成。 

    基于接口的通讯协议的不同,与 ESB 相关的系统可以分为以下四类: 

    基于 Web Services 的系统:基于 Web Services 的系统,例如目前的呼叫中心和电子商务系统都可以提供这种方式,可以使用 SOAP/HTTP(S) 与 ESB 实现整合。 

    基于 FTP/Socket 的应用系统:需要通过 FTP 交换数据的系统,如 FFP 系统等,ESB 可以直接支持 FTP 的方式。ESB 缺省提供文件适配器,其中就可以支持本地文件和远程文件通过 FTP 方式的读写。 

    基于数据库的应用系统:基于数据库的系统,如大客户系统、数据仓库系统,可以通过 JDBC 适配器与 ESB 集成。 

    基于传统应用连接的系统:对于这类系统可以通过定制的 Adapter 与 ESB 以及其他应用实现整合,该 Adapter 可以以 Java 实现。另一方面,也可以通过 XML/MQ 实现与 ESB 的集成,这时,这些传统应用系统将调整为面向消息的方式。使用 MQ 作为一个通用的 Adapter 与 ESB 以及其他应用实现整合,消息的格式可以逐步由现有的专有报文转变为基于 XML 标准的报文。 

    ESB 的物理部署 

    整个 ESB 方案的物理部署配置举例如下: 


    图 10. 航空公司 ESB 物理部署示例 

     

    建议采用两个节点同时安装 WebSphere Message Broker 和 WSRR。其中将 WebSphere Message Broker 配置为 Cluster,将 WSRR 配置为 HA 的方式,采用一台 PC Server 或 PC 机作为监控管理服务器,安装 Tivoli Omegamon for Messaging,实现对 Message Broker 的监控。未来需要流程集成时,可以采用两个节点安装 WebSphere Process Server 组成 Cluster。 


    -------------------------------------------------------------------------------- 
    回页首 
    小结 

    本文从业务角度列举了航空公司商务体系建设中对 ESB 的典型需求举例,并介绍了航空公司 ESB 的总体方案、组件模型、接口设计、物理部署以及涉及到的 IBM 软件产品,介绍了如何利用 ESB 将呼叫中心、电子商务、常旅客、大客户、航班动态发布平台等应用系统进行高效整合,达到航班信息、旅客信息、客票销售信息等主要业务数据的共享,从而提升航空公司的客户服务水平。 
    展开全文
  • 以及客户实战案例归纳总结,形成了一套完整的性能优化方法,包括性能优化思路、代码效率分析方法、编码规范、服务器性能监控、客户实战案例、数据库性能分析及故障诊断方法、基于Web技术的性能优化方案等。...

    《产品级性能调优与故障诊断分析》

    封面巨照

     

     

    作者简介

    郑健,2006~2009连任三届《微软最有价值专家》,荣获《DevWOW微软博客达人》优胜奖,荣获微软《最有影响力开发者》奖项,通过微软【MCSA/MCSE】认证,公司性能优化专家,CSDN 博客专家,著有【庖丁解牛:纵向切入Asp.net 3.5控件和组件开发技术】一书,目前在北京用友软件做产品优化方面的工作。

    Email: togetherbluesky@163.com

    本书主要内容

    一个运行中的系统会受到到很多因素的制约影响,如软件因素会受操作系统、数据库、服务器软件、通讯协议、浏览器等多种软部件的影响,而硬件方面也受CPU、内存、磁盘、网络等各种硬部件因素的影响。服务器硬件配置高,从某种程度上讲是高性能的前提,但性能优化要做的是用低功耗、低成本的技术来实现运行高性能的产品,或者在当前服务器配置下让运行在其中的软硬件达到最佳的高性能状态,使软硬件资源消耗均衡,最终达用功能、体验、性能之间的完美平衡。

    本书根据我多年的性能调优经验,以及客户实战案例归纳总结,形成了一套完整的性能优化方法。工欲善其事,必先利其器,本书主要讲述对产品性能调优的各个方面,比如:从服务器,到客户端,到数据库,到Web页面优化,到服务器监控(CPU、内存、磁盘、网络等),再到WEB服务器故障疹断,以及开发人员高性能编码规范等所有领域。通过阅读本书,可以让您掌握一套对主流C/S及B/S架构下产品级调优方案的整个面,而不仅仅是一个点。

    一个产品开发完成并不意味着软件生命周期的结束,还要考虑对客户产品的后期维护成本。很多产品在开发周期阶段用的时间并不多,但维护阶段出现性能或异常问题时甚至会消耗开发周期几倍的时间,而且维护和支持人员对运行期间遇到的各种怪异问题束手无策。除了优化技术外,本书也可以让您掌握一套服务器疑难问题疹断方法,这样遇到辣手问题时就有思路去分析定位并解决。

    本书读者对象

    本书适合从事软件研发的开发人员、测试工程师(白盒);适合从事数据库维护的DBA工程师;适合客户前线的技术支持工程师;适合计算机系统维护人员;另外,还有本书中提到的这些疹断工具不仅用于疹断.NET平台下的所有应用程序问题,当然也可以调试任何系统下的应用程序,因此本书也适合任何平台下的技术人员参考。

    本书两章公开阅读内容链接

    产品级性能调优与故障诊断分析第一章:  点击阅读本章内容

    产品级性能调优与故障诊断分析第三章:  点击阅读本章内容

     

     立体封面:

     

    .

    展开全文
  • 下面我们从案例的角度来总结分析下一:加盟招商基础定位:背景:某城市货运加盟项目人群:25-45岁 男性卖点汇总:开车养家,活多钱多,一年回本还赚辆车,简单易上手,门槛低,工作自由不受限制账户搭建:以单图、...
  • ASM案例分析与诊断(作者:杨廷琨) 103 ASM实例连接之ORA-1012错误分析 104 ASM空间扩展故障解决 111 ASM创建表空间之ORA-569错误解决 115 一次监听故障的诊断与处理(作者:熊军) 121 问题诊断分析 122 ...
  • 大塘路段开山建路优化方案 丹桂苑水塔加水模型 单循环赛制安排的数学模型 地下管线的优化模型 电教室座位安排的数学模型 电力变压器铁心柱截面的优化设计 电力市场的输电阻塞管理数学模型 发电机的优化调度 ...
  • 针对个体差异普遍存在于产品性能退化过程中,而当前基于退化模型的优化设计普遍没有考虑产品个体差异的问题,...对最优试验方案进行参数敏感性分析,所得结果表明,当参数在小范围变动时最优试验方案具有非常好的鲁棒性.
  • ESB 案例解析和项目实施经验分享

    万次阅读 2015-02-01 00:04:58
    一个实际 ESB 项目实施的成败,不仅要求我们把产品用熟用好,即熟悉 ESB 产品的配置、开发及优化操作,还需要制定正确的、量体裁衣式的解决方案,并且需要借助科学的项目实施方法论,从需求分析方案设计、产品开发...
  • 经过惠普相关人士根据英图现状进行细心分析、论证,为其度身定作了一个加强沟通能力,资源设备优化产品组合方案,保障了英图公司的商业利益,并为其进一步成长提供了必要的动力。依此方案,英图购进了惠普的...
  • 这是一本集Linux系统管理、Oracle数据库、HA高可用、系统性能分析、Linux日志管理、磁盘阵列存储管理、Linux内核优化于一身的综合范例指南。《Linux系统案例精解:存储、Oracle数据库、集群、性能优化、系统管理、...
  • 前言一个实际ESB项目实施的成败,不仅要求我们把产品用熟用好,即熟悉ESB产品的配置、开发及优化操作,还需要制定正确的、量体裁衣式的解决方案,并且需要借助科学的项目实施方法论,从需求分析方案设计、产品开发...
  • 针对不同价值的客户制定优化的个性化服务方案,采取不同营销策略 1.2 目标 借助航空公司客户数据,对客户进行分类。 对不同的客户类别进行特征分析,比较不同类客户的客户价值。 对不同价值的客户类别提供个性化...
  • 研究院HPC建设方案

    2019-02-14 15:53:08
    4.9.3 Analytics实际案例分析 57 4.10 SAO解决方案 59 4.10.1 SAO架构 60 5 PBS支持仿真软件 61 5.1 CAE领域中支持软件分类及特点 61 5.2 CAE领域中支持软件及介绍 61 5.3 CFD领域中支持软件及介绍 63 5.4 其他领域...
  • 用户操作行为分析解决方案 130 HTML5中国统计分析案例图 132 4.1.1.7.6. 业务系统整合解决方案 132 4.1.1.7.7. 大并发时保证后台业务系统可用性解决方案 136 4.1.1.7.8. 性能解决方案 137 4.1.1.7.9. 接口解决...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 182
精华内容 72
关键字:

产品优化方案案例分析