OpenCDN-0.7.2

所属分类:Windows编程
开发工具:Unix_Linux
文件大小:401KB
下载次数:219
上传日期:2006-08-29 17:02:24
上 传 者dokey999
说明:  OpenCDN内容分发系统,适合资源和IPTV等资源分发系统的应用
(OpenCDN content distribution systems, suitable resources and distribution of resources such as IPTV System Application)

文件列表:
oCDN\.lock (0, 2005-06-04)
oCDN\AUTHORS (226, 2005-06-05)
oCDN\ChangeLog (43490, 2005-06-06)
oCDN\ChangeLog~ (43490, 2005-06-06)
oCDN\CPAN\Flock.pm (6590, 2003-11-23)
oCDN\CPAN\Net-IPv4Addr-0.10.tar.gz (8429, 2004-12-09)
oCDN\CPAN\Net-Server-0.87.tar.gz (69235, 2005-02-14)
oCDN\CPAN\RPC-XML-0.57.tar.gz (125941, 2005-02-14)
oCDN\CPAN\RTSP-Lite-0.1.tar.gz (7130, 2004-04-09)
oCDN\doc\RETURNCODES (5080, 2005-06-04)
oCDN\etc\CommConf.pm (6367, 2005-02-09)
oCDN\etc\DarwinConfig (2694, 2005-04-12)
oCDN\etc\HelixConfig (1971, 2005-05-04)
oCDN\etc\NodeConfig.pm (8179, 2005-04-12)
oCDN\etc\OriginConfig.pm (7175, 2005-04-14)
oCDN\etc\RRDMconfig.pm (2560, 2005-04-12)
oCDN\html\about.html (835, 2005-03-13)
oCDN\html\fake.html (3159, 2005-03-13)
oCDN\html\help.html (2151, 2005-03-13)
oCDN\html\index.html (541, 2005-03-13)
oCDN\html\perl\index.pl (5217, 2005-04-05)
oCDN\html\perl\node_status.pl (7661, 2005-06-04)
oCDN\html\perl\request.pl (6440, 2005-05-10)
oCDN\html\perl\rrdm_status.pl (6625, 2005-03-13)
oCDN\html\perl\test.pl (7224, 2005-03-13)
oCDN\html\perl\testpostreq.pl (527, 2005-01-02)
oCDN\html\perl\testprereq.pl (516, 2005-01-18)
oCDN\html\perl\xmlrpc_status.pl (4084, 2005-03-07)
oCDN\html\rrdm_status.html (2248, 2005-04-05)
oCDN\html\test.html (5864, 2004-08-13)
oCDN\Install (7103, 2005-04-18)
... ...

Open Content Delivery Network (OpenCDN) Project Version: 0.7.2, June 6, 2005 Disclaim: this is not a finite application. It is work in progress material, without any other purpose than test and evaluation. Rights: The oCDN package is released under the terms given in the Perl Artistic License (see http://www.perl.com/pub/a/language/misc/Artistic.html) by their Copyright Holders ABOUT ----- The OpenCDN Project is hosted at the University of Roma "La Sapienza", at http://labtel.ing.uniroma1.it/opencdn OpenCDN concerns the development of an application-level Internet Overlay Network, suitable for replication and splitting of Live and recorded multimedia content. Replication of multimedia packets is done by available Streaming Server products form Apple, Real or Microsoft, which turn to be named as "Relays" if cascaded in a multi-hop distribution tree. OpenCDN is written in Perl, and interfaces the Relay technology with a control plane, allowing for remote control of content delivery. Media distribution is hierarchically arranged among participating Nodes, by the aid of a centralised control unit named Request Routing and Distribution Management (RRDM), also written in Perl. Content providers can register metadata describing their contributions, and find it distributed by OpenCDN. Communication in between RRDM and Nodes, and in between Nodes, is performed by XML-RPC calls. Provided that a sufficient number of Relay nodes are scattered in between the source and the destinations, media can be efficiently distributed to a very large number of clients, without severe network and server requirements, actually performing an Application Level Multicast content routing. In particular, first and last mile will be crossed only once. The code is modular and allows for easy porting to different Relay technologies: active development is based on the Darwin Streaming Server, and it has been ported to Helix Universal Server also. Use of WM servers should also be possible, by writing a new Adaptation Layer. You can experiment operations by visiting an announcement page, asking for some content, wait for distribution set-up, and pick up content from the nearest node. Also, you can contribute as a content provider, or as a redistribution node. CONTENTS -------- - dirs doc - some README files - better documentation will come CPAN - Perl modules in addition to the standard distribution etc - configuration files html - page from which users ask for a live content, and more html/perl - Perl CGI code which asks RRDM to set up a distribution chain and which returns a page showing the selected surrogate for the client (and more) lib - Perl modules used by the applications xpl - RPC::XML methods - files RRDMd.pl - Perl code implementing Request Routing and Distribution Management Node.pm - Perl code which interacts with the Adaptation Layer and the RRDM Origin.pm - Perl code running at contributing sources Install - Bash script for the Installation of distributed code patch.pl - modifies a Darwin script file for proper permissions setting launch.sh - starts RRDM and/or some nodes mk_ipaddr - if you put more test nodes on the same host, more IP address are needed mktgz - creates a distro tarball or a pretty printed file with all the source code reqgen.pl - Generates Requests to RRDM in cyclic fashion oCDN.rc - to be called from rc.local or to run unattended REQUIREMENTS ------------ The code has been developed and tested with a Linux Red Hat 9 and Fedora Core (1,2,3) distributions. It has been reported to work also on Slackware 8 and 10, and on Solaris 7 and 8. As Perl (we used version 5.8.0) is portable, chances do exist that the code works with other Unixes also, and with Windows platforms. Operations of nodes is based on the Apple Darwin Streaming Server (version 5.0.1.1). If desired to experiment with other Relay Servers (e.g. WindowsMedia), a new "Adaptation Layer" has to be written (see lib/Dummy.pm and lib/Darwin.pm). Starting from Version 0.6.7, support to Helix Universal Server has been added. Contributing content providers may use a Quicktime Enconder, or the tools by MPEG4IP, or an Helix Producer, or probably much more else which can be sourced by Darwin or Helix. INSTALLATION ------------ As a normal user (call it ocdn if you like), unpack this package in a directory (call it $INSTALL_DIR if you like) You should also get a streaming server implementation, and install it, as described in doc/README.Darwin and doc/README.Helix files. Although, you could just run an Origin or an RRDM daemon, or just use a Dummy adaptation layer, and don't need a streaming server at all. Then, the OpenCDN install script included in the distribution, must be executed by running ./Install as root. At the top of the file, you can change installation parameters, especially you must set the user name which will run the node. Re-execution of the install script should be armless. Or, you can manually install OpenCDN, by following the instructions given in doc/README.install, which can be a good thing to do, in the case you are performing installation on an architecture yet unsupported (i.e. which is different from Linux or Solaris). CONFIGURATION ------------- OpenCDN is built from four kind of entities: * a Portal by which people selects a content, invoke a CGI which asks for OpenCDN configuration, and receive the contact information * an RRDM invoked by the portal, and which performs OpenCDN centralized control * several Nodes which act as Application Level Multicast routers * some Origins which are located at the Content Provider premise Operations of these entities are based on five configuration files, containing Perl Variables initialization, and full comments about the variables meaning and suggested values. /$INSTALL_DIR/etc/CommConf.pm contains values used by RRDM, Nodes, and Origins, so you must edit it anyway, indicating the IP address and port or RRDM (either at your premise, or the public one at 151.100.122.171:4400), and logging preferences. Also, a shared password ($oCDNpassword) must be configured here, in order to activate entities authentication procedures (see doc/README.authentication for details). Such a password must be asked to the RRDM/portal administrator. /$INSTALL_DIR/etc/RRDMconfig.pm contains values only related to RRDM so you can safely ignore it, if you don't run an RRDM. /$INSTALL_DIR/etc/NodeConfig.pm contains values related to the Node control layer; you must specify the Node IP address and port (choose one which is not firewalled) and direct/indirect footprint arrays (see doc/README.routing for a description about how footprint information works). Also, you can configure here whether a Darwin or Helix Streaming server is being used. If you don't run a Node entity, you can refrain form editing this and the following two files. /$INSTALL_DIR/etc/DarwinConfig contains values related to the Apple Darwin Streaming Server; you must follow the instructions given at point 3 of doc/README.Darwin. /$INSTALL_DIR/etc/HelixConfig contains values related to the Helix Universal Server; you must specify your Administrator Username and Password, as chosen at Helix installation. /$INSTALL_DIR/etc/OriginConfig.pm contains metadata information about the Contents to be provided by the OpenCDN, and needs to be edited only by Content providers. These information will be published to the RRDM at the Origin boot time. See also the PARTICIPATION section below, for a more detailed explanation about configuration guidelines. EXECUTION --------- OpenCDN entities can be executed by directly launching either RRDM.pl, Node.pm, or Origin.pm. Try option -h for a list of runtime options, which will override those given by Configuration files. Alternatively, you can use the script ./launch.sh which launches the entities for you, allows to specify some run-time options to be edited on top of the file, and kills stale processes previously started. Also, the script provides a series of options for testing purposes, whose configuration files are present in the CVS, but not in the distribution tarball. Finally, a trivial oCDN.rc script file is given, to be inserted in rc.local, for launching OpenCDN at boot time. OPERATION --------- If you run an RRDM, and an Apache daemon is running, you can access an OpenCDN service request page, located at http:///oCDN/perl/index.pl (upward dirs should be chmod-ed 755) and which looks like the page located at http://labtel.ing.uniroma1.it/oCDN/perl/index.pl, which you should use instead, if you are not running an RRDM. From the OpenCDN service request page you can choose an action and a source. The available contents shown, are that advertised by content providers. After having requested for Service, a new page will report about the best Node from where you should pick up media. You can query about RRDM status, by clicking on the "Status" link given in the top right corner of the OpenCDN service request page, and verify about node registration data, content availability, and distribution setup. From the same pages, you can query about the XML-RPC methods available at the RRDM, Nodes, and Origins. If you want to experiment operations of RRDM and Nodes, without installing the Apple Darwin SS or the Real Helix US, you can use the Dummy adaptation layer, to be configured in etc/NodeConfig.pm. FIREWALL SETUP -------------- In order to properly run one OpenCDN entity, you must take into account the following inbound port usage checklist: Entity | Ports Proto Service Note ----------+---------------------------------------------------------------- RRDM | $rrdm_port TCP XML-RPC communications | $rrdm_port+1 TCP XML-RPC SetUp and Teardown | in forked mode | Node | $node_port TCP XML-RPC communications | $node_port UDP UDP probe requests | Origin | $origin_port TCP XML-RPC communications | $origin_port UDP UDP probe requests | Darwin SS | 554 (default) TCP RTSP commands | 6970 and above UDP RTP and RTCP media packets in & out | (maybe, till 9999) | Helix US | 554 (default) TCP RTSP commands | 34445-34459 UDP RTP replies for UDB resends | 6970 -32000 UDP data chanel outgoing | 2030 -2050 TCP,UDP pull splitting requests in & out | 30001-30020 TCP,UDP live data distribution in & out Values of Variables $rrdm_port, $node_port and $origin_port are those given in etc/CommConf.pm, etc/NodeConfig.pm and etc/OriginConfig.pm, which default to 4400, 4404 and 4407 respectively. PARTICIPATION ------------- This is an Open Source Project, and anyone can contribute to the code development process, to its testing, and to the deployment of a global Delivery Network for live streaming. Please refer to * the TODO file in the distribution for a "left things" list; * doc/README.routing for an overview on how the delivery process works; * doc/README.authentication for XML-RPC authentication of the entities which take part to the same OpenCDN * doc/README.RTSP for inter-nodes delivery authentication; * doc/README.interprocess for inter-entities communication mechanism; * doc/README.adaptation for a very very short overview of the Adaptation Layer API (only if you which to develop a new one). If you intend to partecipate with some entities, be sure to ask to the RRDM adminstrator for the password to be put in $oCDNpassword in etc/CommConf.pm. Then, you can a) run a LastHop node, which will serve your LAN users. It will register itself to the public RRDM, located at 151.100.122.171:4400, and accessed at http://labtel.ing.uniroma1.it/oCDN/. For this, set - in etc/CommConf.pm $rrdm_addr = '151.100.122.171'; $rrdm_port = '4400'; - in etc/NodeConfig.pm @directfp = ( 'your-subnet/mask' ); The FootPrint (FP) information is much like a routing table entry, and identifies the address range you plan to serve directly: if you serve more disjoint subnets, put all of them in the @directfp array, comma separated. The result of this configuration, is that all the clients in your LAN will share an unique inbound stream coming to your LastHop node, without congesting your lastmile connection. b) contribute with new content, either live (such as a street-webcam or a TV broadcast grab) or prerecorded. You must run a streaming server and the Origin.pm daemon, and edit etc/OriginConfig.pm, in order to publish metadata informations about your contents. Also, the values of $ad_layer and $RTSPauth_enable must be set in etc/NodeConfig.pm. c) run a FirstHop Transit node, which will be the root of the distribution for content provided by Origins located in your LAN. It will automagically co-exist with the LastHop node of your LAN, so configuration is the same as for the a) case. Clients within your LAN will receive content provided by Origins you own, directly through this First/Last Hop, while clients outside your direct footprint, will need a LH at their premise, or a public, well connected LastHop node. If you don't want to fill up your outbound link with unnecessary connections, set - in etc/NodeConfig.pm $node_char = 'lazy'; This will hint RRDM to add another Transit relay (if it is available) along the distribution tree rooted at your premise. If you do provide content through an Origin located within your LAN (b case), and miss to place a FirstHop Transit Node, clients in your LAN, which request that content, will see it flowing from the Origin, to the less specific Transit Node found (such as the one depicted in d), and then back to your LastHop node. d) run a Global Transit node, which will be used along the distribution path in between Origins located behind neighboring POPs, FirstHop Nodes if they are present, and LastHop nodes located in remote LANs, where clients are present. Such a Global Transit node will alleviate the load on the first-mile link, coming from Origins and FirstHop nodes. Do this if you are on a well-connected location, and also add a LastHop behavior to your node, in order to provide direct access to clients in the same net. For this, write - in etc/NodeConfig.pm @indirectfp = ( '0.0.0.0/1', '128.0.0.0/1' ); @directfp = ( 'your-subnet/mask' ); $node_char = 'labour'; If more than a Transit node do exist in the same OpenCDN, which announced such a large FootPrint, the Origin or FirstHop will UDP probe them in parallel, and find the nearest, so that each Transit Node will become a relay only for neighboring LANs. Also, you can provide LastHop relaying for clients which are located within neighboring LANs, but haven't placed any LastHop Node which can serve them. For this, write @directfp = ( 'your-subnet/mask', 'LAN1-subnet/mask', 'LAN2-subnet/mask', ... ); When the number of clients attached to your LastHop BackBone Node will grow, their last mile link will congest, making the streaming impossible. It will then be in the interest of user communities, to place a LastHop node serving their own LAN. Finally, you can provide last-resort Global LastHop relaying, for clients located anywhere in the world, and which do miss a LastHop with a suitable, more specific, footprint. For this, write @directfp = ( '0.0.0.0/2', '***.0.0.0/2', '128.0.0.0/2', '192.0.0.0/2', ); More elaborate configurations, will be suggested when OpenCDN begins to grow seriously :-) TROUBLESHOOTING --------------- Q: When I ask for RRDM Status/Node Registration Data, a "No Data" page appears! A: Reading , you can find that the RPC:XML implementation supports compression of requests and responses (if their dimension exceeds a threshold) via the Compress::Zlib module available from CPAN. Maybe the support is not as good as it should: I resolved the problem by simply removing the Compress::Zlib module, by typing rpm -e perl-Compress-Zlib Comments to alef@infocom.uniroma1.it

近期下载者

相关文件


收藏者