---
title:  Topologies and Communication
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

*Topologies and Communication* explains how to plan and configure <%=vars.product_name_long%> member discovery, peer-to-peer and client/server communication topologies.

<a id="concept_7628F498DB534A2D8A99748F5DA5DC94__section_E62DEF9610814012A3307D50A56FE1B4"></a>

-   **[Topology and Communication General Concepts](topology_concepts/chapter_overview.html)**

    Before you configure your <%=vars.product_name_long%> members, make sure you understand the options for topology and communication.

-   **[Peer-to-Peer Configuration](p2p_configuration/chapter_overview.html)**

    Use peer-to-peer configuration to set member discovery and communication within a single cluster.

-   **[Client/Server Configuration](cs_configuration/chapter_overview.html)**

    In the client/server architecture, a relatively small server farm manages the cached data of and access to the same data for many client applications. Clients can update and access data efficiently, leaving the servers to manage data distribution to other clients and any synchronization with outside data stores.

-   **[Multi-site (WAN) Configuration](multi_site_configuration/chapter_overview.html)**

    Use the multi-site configuration to scale horizontally between disparate, loosely-coupled clusters. A wide-area network (WAN) is the main use case for the multi-site topology.


