IP 망을 구성하는 개별 통신 장비 (라우터, 스위치, 허브 등)에 대한 장애, 성능, 구성 관리 및 제어 기능을 제공하여 망 운용 효율을 높일 수 있으며, IP 망 차원의 장애, 성능 분석 기능과 다양한 보고서 작성 기능을 제공하여 망 운용과 계획에 유용한 각종의 정보를 생성 할 수 있는 기능을 제공한다.
서비스 서버 호스트, 개인 업무용 PC, 네트워크 프린터, 허브 등은 서비스 제공 업체 및 일반 기업에서 업무 자동화를 위해 사용하는 전산 자원이다. 이들 전산 자원은 일반적으로 IP 망 기반의 LAN 으로 연결되어 있고, SNMP를 이용한 관리 기능을 제공한다. 'IP 전산 자원 관리 시스템'은 SNMP 와 ICMP 등과 같은 관리 프로토콜을 이용하여 각 전산 자원의 자원 사용 현황 및 현재 성능을 관리하는 기능을 제공한다. 전산 자원의 현재 상태, 자원 사용량, 구성 등에 대한 관리 기능과 비정상적인 자원 사용에 대한 통보 및 이력 관리, 보고서 생성 기능을 제공한다.
IP 망을 구성하는 가장 중요한 통신 장비 중의 하나인 라우터를 경유하는 트래픽에 대한 다양한 정보를 수집하여 트래픽의 특성을 분석하여, 그 결과를 기반으로 망의 구성 변경, 망의 확장, 이상 현상 파악 등의 기능을 수행 할 수 있다. 분석 가능한 트래픽 특성은 '이용자별', '가입기관별', '시간대별', '프로토콜별', '응용 프로그램별' 등이 있다. CISCO 와 JUNIPER 라우터는 Netflow 기능을 이용하여 자신을 경유하는 트래픽에 대한 정보를 제공하고 있다.
IseeNet은 네트워크의 성능, 장애, 자산을 관리하는 웹 기반의 NMS로서 장애 사전 경보 및 네트워크 운영 현황에 대한 실시간 리포트를 제공한다. 서버단 및 WAN 상의 터미널까지 포함한 QOS 관리가 가능해 보인다. SYSLOAD
는 에이젼트 기반 소프트웨어로 OS, Database, Application의 성능 관리 도구이다.
어니언소프트웨어 : Midnight Keeper
기업·기관의 시스템 및 네트워크를 효과적으로 관리하기 위한 솔루션으로 시스템관리소프트웨어(SMS)와네트워크관리소프트웨어(NMS)의 기본기능인 성능·장애관리는 물론 휴대폰·개인휴대단말기(PDA) 등 무선기기를 이용한 원격관리 및제어가 가능한 제품이다.
솔고지닷컴 : AndanTe
서버, 각종 통신시설장비, 네트웍에 대한 실시간 통합 관리용 시스템 소프트웨어로서 운용시설에 대한 성능 모니터링, 장애처리 그리고 이러한 시설의 운용보전자료를 자동으로 생성 이를 웹 상에서 관리하는 통합 자원관리 솔루션
씨에프정보통신 : iConsole은 분산 운영 환경에서 시스템, 네트웍,데이터베이스 등 mission-critical한 관리 자원에 대한 통합 모니터링 View와 Control을 제공한다.
분산된 다수의 시스템, 네트웍, 데이터베이스를 중앙에서 통합하여 모니터링 할 수 있으며 관리되는 시스템과 자원들을 계층적인 구조로 표현함으로써 관리의 복잡성을 최소화하여 업무의 효율성을 극대화합니다.
관리 항목의 상태 변화, 성능 과부하 발생, 장애 발생 등의 상황을 실시간으로 모니터링하며 그래프로 표현함으로써 시스템의 운영 상태를 용이하게 파악합니다.
관리 항목의 상태가 경고 상태로 변하면 계층적인 관리 구조를 따라 경고 상태를 상위 자원으로 전이시키며 자원을 나타내는 아이콘의 색상을 변경 시킴으로써 경고 상태를 신속하게 파악합니다.
관리자가 관심을 갖고 관리하는 항목들만으로 운영 화면을 구성하거나 또는 여러 운영 환경마다 최적화된 운영 화면을 구성 해서 저장한 후 필요시 로드하면 자동으로 재구성하여 관리 환경을 다양화합니다.
히스토리 데이터를 RDBMS에 저장하고 관리함으로써 관리 자원의 상태가 변하는 추이를 분석하거나 장애가 발생한 시점의 상황을 히스토리 데이터를 근간으로 분석할 수 있으며 필요한 운영 통계 보고서를 생성합니다.
네비스텍 : ISeeEMS는 기업의 다양한 IT 자원을 자동으로 관리하기 위한 NMS, SMS, TMS의 통합관리 시스템을 의미 하며 분산환경의 시스템을 전사적인 차원에서 일관된 정책에 따라 통합적으로 운영 / 관리 함으로서 시스템 관리 업무의 효율화를 통하여 업무의 영속성 ( Business Continuity ) 확보와 시스템의 총 소유비용 절감을 극대화 시킬 목적으로 제공되는 네비스텍㈜의 통합 솔루션이다.
한국이디에스 : i-Solutions는 다양한 종류의 인터넷 서비스를 효율적으로 관리하기 위해 이를 구성하는 네트워크 장비, 서비스 제공 호스트 장비, 응용 프로그램 등 서비스에 필요한 모든 구성 요소를 통합 관리할 수 있는 최적의 통합 전산/망 자원 및 서비스 운용 관리 솔루션이다.
/* Interprocess Robust Locks */
#define EOWNERDEAD 58 /* process died with the lock */
#define ENOTRECOVERABLE 59 /* lock is not recoverable */
/* stream problems */
#define ENOSTR 60 /* Device not a stream */
#define ENODATA 61 /* no data (for no delay io) */
#define ETIME 62 /* timer expired */
#define ENOSR 63 /* out of streams resources */
#define ENONET 64 /* Machine is not on the network */
#define ENOPKG 65 /* Package not installed */
#define EREMOTE 66 /* The object is remote */
#define ENOLINK 67 /* the link has been severed */
#define EADV 68 /* advertise error */
#define ESRMNT 69 /* srmount error */
#define ECOMM 70 /* Communication error on send */
#define EPROTO 71 /* Protocol error */
#define EMULTIHOP 74 /* multihop attempted */
#define EBADMSG 77 /* trying to read unreadable message */
#define ENAMETOOLONG 78 /* path name is too long */
#define EOVERFLOW 79 /* value too large to be stored in data type */
#define ENOTUNIQ 80 /* given log. name not unique */
#define EBADFD 81 /* f.d. invalid for this operation */
#define EREMCHG 82 /* Remote address changed */
/* shared library problems */
#define ELIBACC 83 /* Can't access a needed shared lib. */
#define ELIBBAD 84 /* Accessing a corrupted shared lib. */
#define ELIBSCN 85 /* .lib section in a.out corrupted. */
#define ELIBMAX 86 /* Attempting to link in too many libs. */
#define ELIBEXEC 87 /* Attempting to exec a shared library. */
#define EILSEQ 88 /* Illegal byte sequence. */
#define ENOSYS 89 /* Unsupported file system operation */
#define ELOOP 90 /* Symbolic link loop */
#define ERESTART 91 /* Restartable system call */
#define ESTRPIPE 92 /* if pipe/FIFO, don't sleep in stream head */
#define ENOTEMPTY 93 /* directory not empty */
#define EUSERS 94 /* Too many users (for UFS) */
/* BSD Networking Software */
/* argument errors */
#define ENOTSOCK 95 /* Socket operation on non-socket */
#define EDESTADDRREQ 96 /* Destination address required */
#define EMSGSIZE 97 /* Message too long */
#define EPROTOTYPE 98 /* Protocol wrong type for socket */
#define ENOPROTOOPT 99 /* Protocol not available */
#define EPROTONOSUPPORT 120 /* Protocol not supported */
#define ESOCKTNOSUPPORT 121 /* Socket type not supported */
#define EOPNOTSUPP 122 /* Operation not supported on socket */
#define EPFNOSUPPORT 123 /* Protocol family not supported */
#define EAFNOSUPPORT 124 /* Address family not supported by */
/* protocol family */
#define EADDRINUSE 125 /* Address already in use */
#define EADDRNOTAVAIL 126 /* Can't assign requested address */
/* operational errors */
#define ENETDOWN 127 /* Network is down */
#define ENETUNREACH 128 /* Network is unreachable */
#define ENETRESET 129 /* Network dropped connection because */
/* of reset */
#define ECONNABORTED 130 /* Software caused connection abort */
#define ECONNRESET 131 /* Connection reset by peer */
#define ENOBUFS 132 /* No buffer space available */
#define EISCONN 133 /* Socket is already connected */
#define ENOTCONN 134 /* Socket is not connected */
/* XENIX has 135 - 142 */
#define ESHUTDOWN 143 /* Can't send after socket shutdown */
#define ETOOMANYREFS 144 /* Too many references: can't splice */
#define ETIMEDOUT 145 /* Connection timed out */
#define ECONNREFUSED 146 /* Connection refused */
#define EHOSTDOWN 147 /* Host is down */
#define EHOSTUNREACH 148 /* No route to host */
#define EWOULDBLOCK EAGAIN
#define EALREADY 149 /* operation already in progress */
#define EINPROGRESS 150 /* operation now in progress */
/* SUN Network File System */
#define ESTALE 151 /* Stale NFS file handle */
You need a solution that lets you develop loosely-coupled applications. The Model-View-Controller (MVC) architecture is the suggested solution. MVC has been used very effectively in GUI-type applications. By applying the MVC architecture to a J2EE application, you can separate the data access logic from the data presentation logic. You can also build a flexible and easily extensible controller that controls the whole flow of the application. The figure below depicts the MVC architecture.
The MVC architecture can be mapped to multi-tiered enterprise J2EE applications as follows:
All enterprise data and the business logic to process the data can be represented in the MODEL.
The VIEW can access the data through the model and decide on how to present them to the client. The VIEW must ensure that the presentation changes as and when the MODEL changes.
The CONTROLLER can interact with the view and convert the client actions into actions that are understood and performed by the MODEL. The CONTROLLER also decides on the next view to be presented depending on the last client action and results of the corresponding MODEL action(s).
오랜만에 ACE를 보니 이전에는 좀 기능이 많은 C++ Class Library였는데, 이제는 분산시스템을 위한 Framework으로 이용할 만큼 많이 발전했네요. Who is Using ACE을 보니 제가 관심두는 영역인 통신 영역에서도 벌써 많은 레퍼런스가 있군요.
The Structure and Functionality of ACE
The following diagram illustrates the key components in ACE and their hierarchical relationships:
Frameworks
ACE also contains a higher-level network programming framework that integrates and enhances the lower-level C++ wrapper facades. This framework supports the dynamic configuration of concurrent distributed services into applications. The framework portion of ACE contains the following components:
Event demultiplexing components -- The ACE Reactor and Proactor are extensible, object-oriented demultiplexers that dispatch application-specific handlers in response to various types of I/O-based, timer-based, signal-based, and synchronization-based events.
Service initialization components -- The ACE Acceptor and Connector components decouple the active and passive initialization roles, respectively, from application-specific tasks that communication services perform once initialization is complete.
Service configuration components -- The ACE Service Configurator supports the configuration of applications whose services may be assembled dynamically at installation-time and/or run-time.
Hierarchically-layered stream components -- The ACE Streams components simplify the development of communication software applications, such as user-level protocol stacks, that are composed of hierarchically-layered services.
ORB adapter components -- ACE can be integrated seamlessly with single-threaded and multi-threaded CORBA implementations via its ORB adapters.
The ACE framework components facilitate the development of communication software that can be updated and extended without the need to modify, recompile, relink, or often restart running applications. This flexibility is achieved in ACE by combining (1) C++ language features, such as templates, inheritance, and dynamic binding, (2) design patterns, such as Abstract Factory, Strategy, and Service Configurator, and (3) OS mechanisms, such as explicit dynamic linking and multi-threading.
Distributed Services and Components
In addition to its OS adaptation layer, C++ wrapper facades, and framework components, ACE provides a standard library of distributed services that are packaged as self-contained components. Although these service components are not strictly part of the ACE framework library, these service components play two roles in ACE:
Factoring out reusable distributed application building blocks -- These service components provide reusable implementations of common distributed application tasks such as naming, event routing, logging, time synchronization, and network locking.
Demonstrating common use-cases of ACE components -- The distributed services also demonstrate how ACE components like Reactors, Service Configurators, Acceptors and Connectors, Active Objects, and IPC wrappers can be used effectively to develop flexible, efficient, and reliable communication software.
Developing robust, extensible, and efficient communication applications is challenging, even when using a communication framework like ACE. In particular, developers must still master a number of complex OS and communication concepts such as:
Network addressing and service identification.
Presentation conversions, such as encryption, compression, and network byte-ordering conversions between heterogeneous end-systems with alternative processor byte-orderings.
Process and thread creation and synchronization.
System call and library routine interfaces to local and remote interprocess communication (IPC) mechanisms.
It is possible to alleviate some of the complexity of developing communication applications by employing higher-level distributed computing middleware, such as CORBA, DCOM, or Java RMI. Higher-level distributed computing middleware resides between clients and servers and automates many tedious and error-prone aspects of distributed application development, including:
Authentication, authorization, and data security.
Service location and binding.
Service registration and activation.
Demultiplexing and dispatching in response to events.
Implementing message framing atop bytestream-oriented communication protocols like TCP.
Presentation conversion issues involving network byte-ordering and parameter marshaling.
To provide developers of communication software with these features, the following higher-level middleware applications are bundled with the ACE release:
The ACE ORB (TAO) -- TAO is a real-time implementation of CORBA built using the framework components and patterns provided by ACE. TAO contains the network interface, OS, communication protocol, and CORBA middleware components and features. TAO is based on the standard OMG CORBA reference model, with the enhancements designed to overcome the shortcomings of conventional ORBs for high-performance and real-time applications. TAO, like ACE, is freely available, open source software.
JAWS -- JAWS is a high-performance, adaptive Web server built using the framework components and patterns provided by ACE. JAWS is structured as a framework of frameworks. The overall JAWS framework contains the following components and frameworks: an Event Dispatcher, Concurrency Strategy, I/O Strategy, Protocol Pipeline, Protocol Handlers, and Cached Virtual Filesystem. Each framework is structured as a set of collaborating objects implemented by combining and extending components in ACE. JAW is also freely available, open-source software.
Visual Studio .NET 애드인 형식의 Subversion 클라이언트 프로그램입니다. VS.NET과 통합성이매우 높습니다. VS.NET의 솔루션 뷰에서 커밋, 업데이트 등의 작업이 가능하며 솔류션 뷰의 각 파일에 수정되었거나 수정되지않은 파일의 상태를 표시해줍니다.
MOM을 Java로 구현한 xmlBlaster가 감동을 주는군요. http://xmlblaster.org에서 필요한 자료만 추려 보았습니다. 성격이 급하신 분들은 Cool demos와 Replication Demo를 먼저 보시는 것도 좋은 접근이 되겠군요. XMLParser로 Xerces를 사용하기 때문에, C++ Client를 빌드하기 위해서는 xerces-c-src_2_7_0.tar.gz가 필요합니다.
XmlBlaster is MOM (Message oriented Middleware) with a lot of features.
XmlBlaster is a publish/subscribe and point to point 100% Java based MOM server (message-oriented middleware) which exchanges messages between publishers and subscribers. The message is described with XML-encoded meta information. Messages may contain everything, GIF images, Java objects, Python scripts, XML data, a word document, plain text - just anything.
Communication with the server is based on socket, CORBA (using JacORB), RMI, XmlRpc, HTTP or email, clients are free to choose their preferred protocol. Other protocols like SOAP may be plugged in.
Subscribers can use XPath expressions to filter the messages they wish to receive.
This is the publish/subscribe middleware server you have needed many times before, now available for free to glue together your distributed client/server application.
The xmlBlaster server is pure Java and under LGPL.
PHP, Perl, Python, C, C++, C#, Visual Basic.net, Flash, J2ME, Java (applications, servlets, applets) client samples are delivered in the xmlBlaster distribution.
You should be ready to go with your preferred development language.
XmlBlaster provides a browser callback framework, allowing browsers (Mozilla, MSIE, Netscape) to receive instant callbacks over a persistent http connection.
Features:
Free for private,commercial,education use (LGPL - License)
Message Orientated Middleware (MOM) with Publish/Subscribe and PointToPoint (PtP) support
Multi platform support (server is pure Java)
Multi protocol support (CORBA, RMI, XmlRpc, raw socket, EMAIL, native access)
Language neutral (clients for C++/C, Java, Python, PHP, Javascript, Perl, C#, Visual Basic.net ...)
Client side persistent queuing with C/C++/Java/ActiveX/Javascript
When a publisher sends a message toxmlBlaster it passes several plugins until it is rejected by a pluginor savely stored in the server.
When a subscriber subscribes on atopic, the message is passed with a callback to the subscriber,traversing several plugins before it is delivered.
The grafic below gives you an overviewof such a message flow. Please click on the plugin symbol to get moreinformation about the plugin and how to code and register a specificplugin yourself.
The grey plugins are mandatory, youneed to registered a plugin, otherwise a default plugin is chosen.
The green plugins are optional, theyare registered on startup. The mime plugins are activated dependingon the message mime type, the dispatch plugin is activated on demandby a client on login.
The brown plugins allow to control theclustering behavior, they are mandatory if clustering is switched on.
Fig:Message flow in the server (click on plugins for detailedinformation)
The following table shows on the columns different implementationlanguages for the clients and on the rows the different features aredisplayed. If a certain feature is already implemented, a green tickis written into the corresponding cell. In case the feature is notimplemented yet (or if the language does not allow this kind offeature) a red cross is drawn. For features under implementation agreen arrow is drawn.
Publishing ten thousand small messages to xmlBlaster, which updates the messages to one subscribed client. The published and updated messages are acknowledged:
672 messages per second
on a AMD-K7 600 MHz, both client and server on the same machine running Linux 2.4.4 using JRockit 3.1 JVM with JacORB 1.3.30 CORBA lib.
The java virtual machine options are set to -Xms18M -Xmx32M: java -server -Xms18M -Xmx32M org.xmlBlaster.Main java -Xms18M -Xmx32M org.xmlBlaster.test.stress.LoadTestSub
The socket connections eat up most of the cpuload, thereafter XML parsing is expensive. The xmlBlaster code itself only consumes little of the processing time.
Green threads and native threads have more or less the same performance.
Running xmlBlaster and "TestSubManyClients" on the same machine.
There are in this example 10-thousand clients which login to xmlBlaster simultaneously.
For RMI, every login consums ~9 kByte on the server, for CORBA ~11 kByte per login.
All 10.000 clients subscribe to a message.
A publisher client then publishes this message which is updated to all 10.000 clients.
With CORBA, 435 messages/sec are delivered
on a AMD-K7 600 MHz, both client and server on the same machine running Linux 2.2.16 using JDK 1.3 (IBMJava2-13) with JacORB 1.2.2 CORBA lib.
With POA/CORBA the server request handling is finegrained adjustable, here we used 'one thread per request' policy (using a thread pool).
With RMI no server policy is adjustable, looking into Suns java code shows us, that they use 'one thread per request' policy as well (but this is nowhere specified).
In both cases, the number of clients is only limited by the amount of memory (RAM) you have on your server.
Delivering messages in "burst mode"
The "burst mode" collects messages over a certain time and sends them in a bulk.
Collecting 10-thousand messages and publishing them in burst mode, with no client update.
CORBA resulted in 2647 messages/sec
RMI resulted in 2763 messages/sec.
XMLRPC reached 1431 messages/sec.
on a 600MHz Athlon
XmlBlaster does XML parsing for each message.
Message latency
Data about the brutto round trip latency of a message publish/update.
The following results are for one round trip including publish -> processing in xmlBlaster -> update -> parsing in client on a 600 MHz AMD Linux.
CORBA in intranet: ~ 6 milliseconds
XMLRPC in intranet: ~ 16 milliseconds
CORBA over internet: ~ 105 milliseconds
XMLRPC over internet: ~ 320 milliseconds
The persistent http pushback over internet is not measured yet, but expected to be ~60 milliseconds (only the update).
Tested with "java Latency" in directory xmlBlaster/demo/javaclients/Latency.java
Try a traceroute 'desthost' to compare the MoM based round trip with the raw tcp/ip roundtrip times.
Message throughput per second native compiled
The same scenario as above but compiled with TowerJ 3.5.0 native compiler on Linux:
20% - 35% performance increase compared to JDK 1.2.2
It is possible that these number are higher in other test scenarios since this test case cycles mainly in TCP/IP calls.
Publishing one thousand different messages with only 8 bytes of content and with a relatively small meta data key to xmlBlaster (x86 PC):
Approximately 2.4 KByte RAM per message
Note this is the raw memory consumption of xmlBlaster to handle a single message. Your message content (for example a gif picture or some text) must be added to this value. The message content may as well be a pointer to some bigger file to avoid RAM consumption.
XSL and XML performance
As XSL processor we use XT written by James Clark.
The XML engine is currently Crimson from Sun for JDK <= 1.4 and since JDK 1.5 the natively delivered XML parser
This is not one of the fastest combinations today, but there may be the option to switch to another parser in future xmlBlaster releases.
See the performance overview, copied from the XSL mailing list for coding hints.
Please visit XSLBench, the performance benchmark of XSLT processors for further informations.
This performance test from Kuznetsov and Dolph shows that XT is still superb performing. Java XML Benchmark Results Here is a comparison of SAX2 versus pull parser performance and here another interesting one.
The Java virtual machine
The used Java virtual machines have a high impact on the overall performance.
The Volano Report gives a good overview about current implementations, as a result we may run some tests with the IBM virtual machine in future.
See Suns comparison as well.
The Solaris tar is not compatible with our GNU tar. Solaris users should download the zip version or install a GNU tar on their machine.
Installation:
Unpack the distribution and follow these guidelines.
For more thorough installation informations please read the file xmlBlaster/INSTALL in the distribution.