# Introduction

## What is ServiceComb Service Center

Apache ServiceComb Service-Center is a Restful based service-registry that provides micro-services discovery and 
micro-service management. It is based on Open API format and provides features like service-discovery, fault-tolerance, 
dynamic routing, notify subscription and scalable by design. 
It has high performance cache design and separate entity management for micro-services and their instances. 
It provides out of box support for metrics and tracing. It has a web portal to manage the micro-services.


## Why use ServiceComb Service Center

ServiceCenter is a service registry. Like other service registry, 
its main role is to solve the problem of service registration and discovery, 
that is the problem of dynamic routing. At the same time, 
in order to better solve the problem of cross-team collaboration, 
it adds support for contract (based on OpenAPI specifications) services. 
If it is used with contract tools (Toolkit) or Java microservice development kit (Java Chassis), 
communication Interfaces will become transparent, allowing users to focus on business development.
