Most of the functionality of Geode is implemented in the subproject gemfire-core. There, under com/gemstone/gemfire you will find an array of packages that hold the public API and also the implementation of those APIs.
Here are the main architectural components:
Here are some good starting areas for each component:
internal/cacheNotable classes are GemFireCacheImpl, LocalRegion, DistributedRegion, AbstractRegionMap, and AbstractRegionEntry.
For partitioned regions start with PartitionRegion, BucketRegion, PartitionedRegionDataStore and PartitionedRegionHelper.
internal/cache and internal/cache/persistenceStart with DiskStoreImpl and Oplog.
internal/cacheReplication is primarly implemented in messaging classes in this package. There are lots of messaging classes here, such as DistributedCacheOperation & subclasses, RemoteOperationMessage & subclasses, PartitionMessage & subclasses, SearchLoadAndWriteProcessor, GetInitialImageOperation and StateFlushOperation.
Also look in CacheDistributionAdvisor and RegionAdvisor. These hold profiles of peers and are used to determine who should receive replication messages.
distributed/internalNotable classes in these packages for message distribution are InternalDistributedSystem, DistribuitonManager, DistributionMessage, ReplyProcessor21, JGroupMembershipManager. All peer-to-peer messages are implemented as subclasses of DistributionMessage.
cache/internal/queryStart with DefaultQueryService.
internal/cacheThe primary classes are TXState and TXCommitMessage.
distributed/internal/locksDLockService and DLockGrantor are good classes to begin with.
cache/execute/internalStart with FunctionServiceManager and the subclasses of AbstractExecution.
cache/client/internal and internal/cache/tier/socketscache/client/internal contains the client-side code. Look at ServerRegionProxy, which hooks into LocalRegion (in the internal/cache package) to turn it into a client-side Region. Classes ending with Op perform the actual messaging interaction with servers using the class OpExecutorImpl.
Subscription feeds are received and handled by CacheClientUpdater.
On the server side the classes in internal/cache/tier/sockets come into play. AcceptorImpl accepts connections from clients and ServerConnection threads handle individual requests. CacheClientProxy sends subscription messages to clients. CacheClientNotifier receives events from the Cache and hands them to the appropriate proxies.