# An Enhanced Message Distribution Mechanism for
## 2 Related Works  
As a result of the lack of clear standards, the existing optimizations for controllers and apps mainly focus on stability, safety, and scalability. [PERSON] et al. [15] indicate that the global network-wide optimizations are designed to address deficiencies in the SDN ecosystem and provide general optimizations for SDN apps. They call these optimizations SDN Enhancements that are totally different from SDN apps, being roughly classified as conflict-resolver, TCAM-optimizer, invariant checker, and fault-tolerant provider. We focus on SDN Enhancement for controllers and apps in this paper, so others for SDN switches and southbound interface are not in our consideration.  
Part of SDN Enhancements aims to resolve the conflict between apps, such as resource allocation and strategy conflict. [PERSON] et al. [16] propose the concept of participatory networking referred to as PANE, in which the network provides a configuration API to apps and its users. In terms of conflict resolution, PANE represents a policy tree using Hierarchical Flow Tables [17] and three types of conflict-resolution operators to merge the conflict policy and generate the final action. [PERSON] [18] uses last-writer-wins and priority-based locking for resolving the conflict of each app's strategy meanwhile rejectingpartial conflicting variables that are uncontrollable in the target state. GitHub (2020) runs a repository server to maintain the authoritative copy of the flow configuration state and track additional metadata for each evolving snapshot of the flow state, which resolves conflict while updating incrementally.  
In the face of uncertainty of multiple apps running, some SDN Enhancements need to ensure the minimum stability and security of program operation. Statesman (2020) proposes two network invariants--connectivity and network capacity--and the checker in the statesman system will check whether the target state meets the requirements of invariants before updating the state to the data plane. VeriFlow (2020) generates a forwarding graph for each equivalence class, which is much similar to the definition of flow and checks the forwarding graphs' reachability, no-loop, and so on. In order to improve failure tolerance, LegoSDN (2020) prototype proposes that it is better to sacrifice the availability of the flow that is dependent on a single switch than to sacrifice the connectivity of other flows dependent on the entire network. When it is unacceptable for some invariant, LegoSDN will use a host of policy checker to ensure that the network maintains a set of \"NO-Compromise\" invariants, just like VeriFlow (2020) or the module in (2020).  
In addition to the above SDN Enhancements for conflict resolution and network invariants, FatTire (2020) designs a new language for writing fault-tolerant SDN programs that provide paths as basic programming construct and applies to switches that support OpenFlow to achieve rapid fault recovery. Many existing SDN enhancements sacrifice the performance of SDN apps in order to ensure versatility. It is pointed out by (2020) that this effect may reduce app performance by as much as 28%. At the same time, many enhancements do not consider the impact of the number of apps on functions and performance, which further reduces the performance during a large-scale deployment.