Show notes
Interview with Teemu Koponen of Styra and Yusheng Wang of VMware, about the nlog language. nlog, in this context, is unrelated to the logging platform for .NET. It is a database language, a simplified form of Datalog that lacks recursion and negation. Teemu designed this language for use in Nicira NVP, the forerunner of VMware NSX-MH. Yusheng is now working to implement nlog in OVN. Teemu and Yusheng begin by describing the nlog language, its name (the “N” stands for “Nicira.”), and its purpose and contrast it with more commonly known languages such as SQL. An nlog (or Datalog) program consists of a series of queries against input table that produce new tables, which can be reused in subsequent queries to eventually produce output tables. In a network virtualization system such as NVP or OVN, input tables contain information on the configuration or the state of the system. The queries transform this input into flow tables to push down to switches. The nlog program acts a function of the entire contents of the input tables, without reference to a concept of time or order. This simplifies implementation, because it avoids ordering problems found so pervasively in distributed systems. Thus, versus hand-code state machines, nlog offers better hope of correctness and easier quality assurance, since it allows programmers to specify the desired results rather than all of the possible state transitions that could lead there. Topics include:
- Related (more complicated) work in academia.
- External functions for mapping output.
- Query planning in NVP and in OVN.
- Sharding, threading, and performance.
- Where Yusheng is planning to first propose nlog for use in OVN.
- The simple Java-based network virtualization system that Yusheng built to demonstrate the idea.
- The patches that we should expect to see soon from Yusheng.
- Code size for nlog implementations (small!).
- Strategies for testing an nlog implementation.
- Data types in nlog, and risks of asynchronous interfacing
- Convergence, performance, and transactions.
- Lessons learned:
- Only implement a DSL if you know what you're getting in for.
- nlog solved correctness issues, period (leaving developers to worry about scale).

