• 1. Erlang开发电信网管项目实践Author: Ery Lee Date: December 2008 Email: ery.lee@gmail.com
  • 2. AgendaAbout Opengoss Project Road to Erlang The Architecture Erlang Highlights What We Got What We Lost About Erlang Syntax Thinking in Software
  • 3. About Opengoss Project
  • 4. What's Opengoss?Next Generation Network and Business Management System One uniform platform based on Linux,Erlang/OTP and ROR Different applications for WIFI, EPON and Enterpise networks
  • 5. Opengoss Product Family DMIT, Monet, Evabus, Report, RRDB, WebTopoPlatformLinux/Unix, MySQL, Oracle, LDAP, Erlang/OTP, Ruby and Rails…BaseN/AOpengoss EnterpriseOpengoss EPONOpengoss WLANNMSN/AN/AN/AWIMSSOSSInternetEnterpriseEPON-OSSWIFI-OSS
  • 6. Future of OpengossThe Network Management Cloud
  • 7. Road to Erlang
  • 8. Pure Java Originally…First Version: Java and JEE… Second Version: Java, OSGi, Eclipse, Model-Driven…
  • 9. Java could do everything, but…Java , JSP , JSF, Struts, Webwork, Velocity , Spring, Hibernate, iBatis, EJB, JDO, JMS, JNDI, JDBC, JAAS, JTA, RMI, IIOP, Web Services, SOAP, SOA, SDO... But, could Java do anything best?
  • 10. We Had a Big Idea Once☺Planned Third Version: OSGI, Component, Plugin, SOA, SDO, SCA…
  • 11. But we have no money and big team...
  • 12. We are tired of NEW concepts and frameworks...SDO, SCA, SOA, ESB, BPML,SOBA... Endless WS-* Documents…
  • 13. Into the WildWe want to be far away...
  • 14. “Hello Stranger”Fall in love with REST, Rails and Erlang …
  • 15. Why Erlang?Simplicity Performance Concurrency Distribution Fault Tolerance
  • 16. The Architecture
  • 17. ArchitectureTrouble Ticket 3rd partyAutomationsSNMP ProbePSyslog ProbePAPIPGenericPEvabusSNMP MonitorMPing MonitorMTCP MonitorMOther MonitorMWebPortal (WebTop)‏DMIT‏RRDBLDAP/MITRDMSMonetUI DataBizCollect
  • 18. Design
  • 19. LayersPresent Layer: AJAX, Rails Data Center Layer: MySQL, Oracle, RRDB, LDAP Business Layer: DMIT(Distributed MIT), Evabus(Event and Alarm Bus), Monet(Distributed network monitor)‏ Data Collection Layer: Probe, Monitor, Mediator
  • 20. DMITLDAP and Syncrepl
  • 21. EvabusConcurrent Event and Alarm Process Line
  • 22. MonetMassively distributed network monitor and data collection
  • 23. ErrdRRDTool Erlang port
  • 24. Erlang Highlights
  • 25. Master/Slave and Pool Distribution and load balance.
  • 26. Master Applications
  • 27. Slave Applications
  • 28. Sample code: poolhandle_cast({add, Dn, Attrs}, State) -> Node = pool:get_node(), rpc:call(Node, monet_agent, monitor, [{Dn, Attrs}]), ets:insert(mon_entry_table, {Dn, Node}), {noreply, State};
  • 29. OTP Behaviorsapplication supervisor gen_server gen_event gen_fsm gen_monitor
  • 30. Supervisor tree
  • 31. gen_server: opengoss_mysql-module(opengoss_mysql). -behaviour(gen_server). -export([insert/2, select/1, select/2, select/3, update/2, update/3, delete/2]). ...... ...... ......
  • 32. gen_server: opengoss_mysql(cont)‏opengoss_mysql:select(wifi_mobile_units, [id, mac], {ap_dn, Dn})‏ opengoss_mysql:update(wifi_mobile_units, [{last_seen, {datetime, Now}}], {'and', {ap_Dn, Dn}, {'in', id, UpdatedIds}})‏ opengoss_mysql:delete(wifi_mobile_units, {'and', {ap_Dn, Dn}, {'in', id, DeletedIds}});
  • 33. gen_event: mit_event_hhandle_event({present, Dn, Entry}, State) -> handle_add_entry(Dn, Entry), {ok, State}; handle_event({add, Dn, Entry}, State) -> handle_add_entry(Dn, Entry), {ok, State}; handle_event({modify, Dn, Entry}, State) -> handle_modify_entry(Dn, Entry), {ok, State}; handle_event({delete, Dn, _Entry}, State) -> handle_delete_entry(Dn), {ok, State};
  • 34. gen_fsm: eldap_syncrepl-module(eldap_syncrepl). -behaviour(gen_fsm). -include("eldap.hrl"). -include("ELDAPv3.hrl"). -export([init/1, connecting/2, wait_bind_response/2, wait_syncrepl_response/2, handle_event/3, handle_sync_event/4, handle_info/3, terminate/3, code_change/4, close/0]).
  • 35. Other librariesSNMP Mochiweb Errd Eldap MySQL driver Cron
  • 36. What We Got
  • 37. ProductivitySmall team to develop a NMS product 2 Ajax/Html, 2 Rails/DB, 1 Erlang 2 days to coding syncrepl protocol
  • 38. Performance1 HP380, 2 CPUs, 4G mem, 8 Cores 1 Oracle, 1 Mysql, 1 OpenLdap, 4 Mongrel, 1 Master, 4Slaves 5 minutes interval 10+ measure items average Collect 200 Switches, 1200 Aps, 8000 Interfaces
  • 39. Concurrency8000+ collect processes 80 SNMP client 80 PING 30 RRDTools 4 Erlang SNMP Client
  • 40. ScalabilityMassively Distributed Data Collection Scale from 1000+ to 100,000+ Aps Try to resolve IO bottleneck Try to partition data
  • 41. StabilityNever stop monitor engine Failure Recover Hot code loading
  • 42. DistributionTransparent distribution No effort to get master/slave
  • 43. HappinessLess code, Less noises More Happiness
  • 44. LonelinessNo Girls?
  • 45. What We Lost
  • 46. JavaComprehensive matured libraries and frameworks The Java community
  • 47. BuzzwordNo SOA, SCA, SDO, ESB finally...
  • 48. About Erlang Syntax
  • 49. LoveFunction Programming? Pattern match List comprehension
  • 50. HateUgly If String Support Records
  • 51. Thinking in Software
  • 52. Far away from SOASOAP Died... WS-* is dying... And then SOA???
  • 53. OO is over evaluatedThe revolution is RDBMS and C Language http://pojo.javaeye.com/
  • 54. It's just DataIT was named as "Data Processing" in enterprise. The data looks like table and records in DB The data looks like objects in business layer The data looks like Tables, Trees and Forms in UI layer
  • 55. AJAX SucksAnd Flex?
  • 56. REST REST is very important.
  • 57. Cloud is not a mythBuild your own cloud. Erlang makes it easy?
  • 58. Thanks :)‏